敵のプレハブの周りには、事実上トリガー要素であるクワッドボックスが置かれています。次に、あなたが設定した敵のスクリプト(タグタイプを使用して想像する)が、クワッドボックスを使用して、適切なコードを実行して、敵を近づけないようにし、このトリガーボックスと実際に重なる敵を防ぎます。
あなたの質問では、敵のユニットを具体的に参照するのではなく、具体的には非常におそらくコードの悪い方法であるように見えるように見えます。名前付き参照エンティティ。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
private Transform otherEntity;
public float distance = 50.0f;
private Transform thisEntity;
void OnTriggerEnter(Collider other)
{
otherEntity = other.GetComponent<Transform>();
thisEntity = GetComponent<Transform>();
thisEntity.position = (thisEntity.position - otherEntity.position).normalized * distance + otherEntity.position;
}
}
私は上記のコードをテストしたが、あなたが参照するコード変換の値は、これは、バージョン5.1のリリース以来、ユニティでALOTを変更したとして、参照先エンティティのためのゲームコンポーネントからロードし、あなたのしているを使用していませんあなたのコードのソースは2012年に与えられた答えでした!
thisEntity
は、スクリプトが添付されているオブジェクトです(通常は敵の1つです)。 otherEntity
はクワッドトリガーの対象です(クワッドはトリガーエレメントとして参照する必要があります)。
Entity
変数の値は、トリガーが入力されると設定する必要があります。正しいother
要素。
(私は私の方法論と完全に間違っているかもしれないが、私はこのことができます願っています。)多く、これは私が探していたアイデアの一種である
感謝。 – shell
'GetComponent' 'obj.transform'よりも遅くなければならず、省略形を書くことはstですこのクラスのベストプラクティスとみなされます(他のコンポーネントでは非推奨です)。また、 'otherEntity'をメンバ変数として宣言すると、何も得られません。関数内でのみ使用されている場合(これは通常、衝突ハンドラに当てはまります)、読みやすくするためにローカルにする必要があります。 'thisEntity'をキャッシュすれば少し時間が節約されるかもしれませんが、もしそうなら' Awake() 'にキャッシュされます。 (それもローカル変数にしても問題ありません。)メモを取る、@シェル –
piojo
@piojo私はメモリから純粋に書いていましたが、obj.transformが上で概説したケースでは識別可能であるとは確信していませんでした。 「確かに。私は 'thisEntity'をキャッシュする必要があることに同意します(各トリガーの火災で再確立する必要はありません)。フィードバックの応援 – Martin