2

ターゲティングシステムを作成しようとしています。

スケルトンの敵をクリックすると、スケルトン スクリプトからヘルスとダメージにアクセスできるようになり、同様に、別の敵をクリックすると、特定のヘルスとダメージを取得たいと考えています。

これを行う唯一の方法はGetComponentメソッドを使用することですが、ターゲットにした敵に応じて変数を使用するジェネリックGetComponentを使用して、その変数に基づいて選択した敵のデータを取得する方法はありますか?

4

1 に答える 1

4

サンプルコードが表示されていないため、何ができて何がうまくいかなかったのかを確認するのは困難ですが、これは問題にアプローチする 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そうしないと、同じコードを何度も書くことになるだけでなく、同じものの異なる実装とのやり取りが困難になります。

*高度な状況では、単一の巨大なクラスではなく、ヘルス スクリプトの複数の実装が必要になる場合があります。このような状況では、インターフェース、継承、メッセージパッシングなど、ある種の抽象化が役立ちます。

于 2014-07-15T04:55:38.453 に答える