質問: True } Gameobject ChosenRandomGameObject (strings S){ //省略 //シーンに存在する"S"を含むゲームオブジェクトから、ランダムに一つ選んで返します。動作確認済み。 } ``` ### 試したこと そういったことのできそうな関数を探したが見つからなかった。 ### 補足情報(FW/ツールのバージョンなど) Unity Ver.2017.2.0f3
回答: 「処理」という言葉の意味がよくわかりませんが、「ぶつかるまでMyMethod()内で待機する」ということでしょうか? もしそうであれば、関数が終了しない限り他の処理が行えないというUnityの仕様によって、フリーズします。 一応、コルーチンを使えば実装できなくはないですが、「ゲームオブジェクトを選択する」処理と「当たり判定を行う」処理を行うタイミングは別々(前者は1回だけだが、後者は毎フレーム行う)なので、分けて考えた方が良いかなと思います。 その上で私だったら、以下のように書きます。 (動作未確認なので、エラーなどがあったらすいません) ``` private bool CHOSEN; private bool MethodFIN; RigidBody2D rb; private GameObject target; // 選択されたオブジェクトBをメンバ変数で保持 // MyMethod()は最初の1回だけ呼ぶ public void MyMethod(){ if (CHOSEN == true) { target = ChosenRandomGameObject ("B"); Rigidbody2D TargetBody = target.GetComponent (); rb.velocity = TargetBody.position; // 当たり判定の処理はここでは行わない(OnTriggerEnter()で行う) } } void OnTriggerEnter(Collider col) { // ぶつかったオブジェクトがBかどうか if (col.gameObject == target) { // ぶつかったときの処理 // ぶつかったときの処理が完了したことを通知 MethodFIN = true; } } ```