ターゲティングシステムを作成しようとしています。
スケルトンの敵をクリックすると、スケルトン スクリプトからヘルスとダメージにアクセスできるようになり、同様に、別の敵をクリックすると、特定のヘルスとダメージを取得したいと考えています。
これを行う唯一の方法はGetComponent
メソッドを使用することですが、ターゲットにした敵に応じて変数を使用するジェネリックGetComponent
を使用して、その変数に基づいて選択した敵のデータを取得する方法はありますか?
ターゲティングシステムを作成しようとしています。
スケルトンの敵をクリックすると、スケルトン スクリプトからヘルスとダメージにアクセスできるようになり、同様に、別の敵をクリックすると、特定のヘルスとダメージを取得したいと考えています。
これを行う唯一の方法はGetComponent
メソッドを使用することですが、ターゲットにした敵に応じて変数を使用するジェネリックGetComponent
を使用して、その変数に基づいて選択した敵のデータを取得する方法はありますか?
サンプルコードが表示されていないため、何ができて何がうまくいかなかったのかを確認するのは困難ですが、これは問題にアプローチする 1 つの方法です。
//Pseudocode
GameObject enemy = GetEnemy(); //This could be a raycast, collision or some other method.
Health enemyHealth = enemy.GetComponent<Health>();
それは本当にとても簡単です。別のアプローチとして、メッセージを送信し、必要に応じて敵に処理させることもできます。 ドキュメントから:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void ApplyDamage(float damage) {
print(damage);
}
void Example() {
gameObject.SendMessage("ApplyDamage", 5.0F);
}
}
その音から、あなたが抱えている問題は他のコンポーネントを取得していないことですが、関連のない機能をたくさん混ぜ合わせていることです。 敵gameobject
は一般的に言えば*health component
メイン プレイヤーと同じである必要があります。Enemy
ヘルス コードはおよびPlayer
およびコンポーネントに含めるべきではありません。Destructible Box
そうしないと、同じコードを何度も書くことになるだけでなく、同じものの異なる実装とのやり取りが困難になります。
*高度な状況では、単一の巨大なクラスではなく、ヘルス スクリプトの複数の実装が必要になる場合があります。このような状況では、インターフェース、継承、メッセージパッシングなど、ある種の抽象化が役立ちます。