ゲーム制作をしている中で良く遭遇し、その度に悩んでいる場面があるのでお聞きします。
工場クラスから大量に生産されるボール同士がぶつかると、その場所にエフェクトを出現...させるとします。
ただ、エフェクト出現クラスをどのように呼び出すのが最善か分からずに悩んでおります。
- EffectDisplayクラスをシングルトンクラスにする。
- BallクラスのコンストラクタでEffectDisplayクラスの参照を渡す
- Ballクラスのコンストラクタでエフェクト出現のコールバックを渡す
思いつくのはこの3つですが、大抵末端クラスの状態によって別クラスの関数を呼びたい際は
1の方法で行きますが、オススメの方法などあれば教えて頂きたいです。
public class BallGenerator : MonoBehaviour { [SerializeField] private GameObject ballPrefab; private int makeCnt = 30; void Start() { for(int i = 0; i < makeCnt++; i++) { GameObject newObj = Instantiate(ballPrefab, this.transform); newObj.tag = "Ball"; newObj.GetComponent<Ball>().Init(); } } } public class Ball : MonoBehaviour { public void Init() { Vector3 rndVec = new Vector3(Random.Range(-100f, 100f), Random.Range(-100f, 100f), Random.Range(-100f, 100f)); // ランダムな座標に飛ばし transform.localPosition = rndVec; // 適当に吹っ飛ばす this.GetComponent<Rigidbody>().AddForce(rndVec); } public void OnCollisionEnter(Collision collision) { if(collision.gameObject.CompareTag("Ball")) { // ここでエフェクト発動! gameObject.SetActive(false): } } } public class EffectDisplay() { public void EnableEffect(Vector3 pos) { // エフェクトをそこに出現させる } }
> 最善か分からず
最善というのは「基準」が必要です。例えば 1. は「作業量が少ない」という基準では「最善」ではありません。
あなたの回答
tips
プレビュー