2014年12月14日日曜日

オブジェクトの接触時処理をどこに書くか?

プレイヤーが敵と接触した際の処理をどこに記述すればいいのか?

1.プレイヤーのスクリプトに書く
「プレイヤーが敵に接触したのでダメージを受ける」

2.敵のスクリプトに書く
「敵がプレイヤーに接触したのでダメージを与える」

3.オブジェクト管理スクリプトに書く
オブジェクトA(プレイヤー)がオブジェクトB(敵)に接触したのでそれに準ずる処理関数を実行する

4.それ以外の管理方法

1と2だとルールを厳密に決めておかないと関数の場所が分からなくなる。
1と2が混ざるとやばそうだが、例えば「すべて1の書き方」と決めるのも難しそう。「AはB、Cと接触した場合等しくダメージを受ける」という処理が、1の書き方に限定すると「BはAにダメージを与える、CはAにダメージを与える」となって、同じ処理を2箇所に書くことにならないか?

3は直感的に分かりにくい感じがするけど管理は楽そうである。
ただ、敵ごとに異なる処理が必要な場合(ダメージ量とか、クラッシュバンディクーみたいに死亡アニメが異なるとか)には処理を敵ごとに分ける必要がある


4はなんかあるか?


とりあえず3でやってみる。
プレイヤーが敵と接触時ダメージを受ける。敵によって量が異なる。という処理の場合、
・オブジェクト管理スクリプトが接触判定「プレイヤーが敵と接触」
・オブジェクト管理スクリプト内の「プレイヤー敵接触処理」が呼び出される
・敵の持つダメージパラメータを呼び出す
・プレイヤーの「被ダメ処理」関数を呼び出す

って感じになる。

0 件のコメント:

コメントを投稿