質問: enemy.GameObjectName(); //オブジェクト1のデータを格納// if (underPlayer) //踏まれてるなら// { gon.GetComponent().velocity += new Vector2(0, 0); //物理挙動にばらつきが出にくいように速度を一旦リセット// gon.GetComponent().AddForce(Vector2.up * EnemyJumpPower); //上方向に力を加える// Invoke("EnemyJump", EnemyDeadLong); //少し経ってからEnemyJumpメソッドを呼び出す// } } else //カメラ外にいる場合// { rb.Sleep(); //スリープさせる// } } void EnemyJump() { gameObject.SetActive(false); //オブジェクトを消す// } } ``` ! よろしくお願いします。
回答: まず、敵オブジェクトA(1)の子のコライダー(3)にアタッチしたPlayerCheckと、敵オブジェクトA(2)の子のコライダー(5)にアタッチしたPlayerCheckの、underPlayerフラグなどの状態が、それぞれ異なる値に更新されるのは、正常な動作です。 なぜそうなっているかという点については、Unityの仕組みというより、Unityのスクリプトに使うプログラミング言語であるC#に理由があります。 > 別のクラスとして扱われているということでしょうか > > > 3と5が持っているPlayerCheckは、同じクラスから作られた別のインスタンスなので、フラグなどの状態はインスタンス毎に持っているからというのが、答えになるかと思います。 `public class PlayerCheck : MonoBehaviour` の様にMonoBehaviourを継承したクラス(Unityでいうコンポーネント)を書いているとあまりインスタンスを作るコードを書かないかもしれませんが、コンポーネントとしてgame objectにアタッチすると、Unityが内部的にそのクラスからインスタンスを作っています。 [第12回] クラスの基本的な使い方を学ぶ|Unityで学ぶC#入門 – XR-Hub クラスとインスタンスについては、C#の基本的な機能なので解説するwebサイトが沢山あります。 例えばこのXR-HUBの記事なんかは、分かりやすいんじゃないかと思います。 【連載】Unityで学ぶC#入門 – XR-Hub Unityを始めた事でC#も始める事になった人にちょうど良さそうな連載で15記事あるので、もしかしたら他の記事も読むと役に立つかもしれません。 あと、C#で書いた、1つのクラスから2つのインスタンスを作り、それぞれが異なる値を持っていて、片方だけ更新される例です。