UnityのSendMessageの使用法の簡単な説明であり、SendMessageには受信者がありません。エラー訂正



Brief Description Unity S Sendmessage Usage



Unityプロジェクトの開発を勉強していたとき、私が使用したSendMessageには次のエラーがよくありました。
is:SendMessageにはレシーバーがありません!

**まず、エラーの原因を最初に理解します。**名前が示すように、送信されたメッセージには受信者がいません。アナロジーは、オブジェクトAを定義すると仮定することですが、Aがイベントをトリガーするときは、オブジェクトBを呼び出す必要があります。使用しているメソッドでは、最初にBを見つけてから、次のようにSendMessageに移動する必要があります。
エラーが報告される例を次に示します。



if(collision.tag == 'Player' || collision.tag == 'enemy') { collision.SendMessage('hitByCrusher') }

GameObject.Find()の使用例を次に示します。メッセージを送る

if(collision.tag == 'enemy') { GameObject.Find('Enemy').SendMessage('hitByCrusher') } if(collision.tag == 'Player') { GameObject.Find('Player').SendMessage('hitByCrusher') }

2番目の解決策は、SendMessageOptions.DontRequireReceiverを使用することです。
受信者がいる必要はありません。メッセージを受信するオブジェクトがないかどうかは関係ありません



まず、SendMessage、SendMessageUpwards、BroadcastMessageの使用シナリオと使用法を理解しましょう。

** SendMessage:**ゲームオブジェクト上のすべてのMonobehaviorスクリプトにメッセージを送信します。送信されるコンテンツは次のとおりです。

SendMessage( '関数名'、パラメーター、受信メソッドが必要かどうか)。
1.最初のパラメーター(関数名)は、渡されるメッセージの名前を参照します。同じ名前のゲームオブジェクトのMonobehaviorスクリプト内のすべてのメソッドが呼び出されます。
2. 2番目のパラメーターは、メソッドが渡す必要のあるパラメーターを参照します。これはnullの場合があります。
3. 3番目のパラメーターは、受信メソッドが必要かどうかを示し、SendMessageOptions.RequireReceiverには受信メソッドが必要です。
SendMessageOptions.DontRequireReceiverは受信メソッドを必要としません。



コードは次のように表示されます。

if(collision.tag == 'Player' || collision.tag == 'enemy') { collision.SendMessage('hitByCrusher',null, SendMessageOptions.DontRequireReceiver) }

** SendMessageUpwards:**は、ゲームオブジェクトと親ゲームオブジェクトのすべてのMonobehaviorスクリプトにメッセージを送信します。上向きに送信するために要約されます。使い方は上記と同様です。

** BroadcastMessage:**メッセージは、ゲームオブジェクトと子ゲームオブジェクトのすべてのMonobehaviorスクリプトに送信されます。送信として要約されます。使い方は上記と同様です。