2017-12-06 20 views
0

UnityEventについて読んで、実装しようとしています。PrefabでUnityEventにリスナーをプログラムで追加する方法

GameObject "ScriptsHolder"にアタッチされた "GameController.cs"スクリプトと "target"というプレハブGameObjectにアタッチされた "target.cs"スクリプトがあります。

「ターゲット」は、起動時にシーンではない:私は、「target0」、「ターゲット1」に名前が変更され、特定の時点で、複数のターゲットを開始...

ターゲットがダメージを受け、私はそのオブジェクトを破壊するvoidを持つGameController.csにその名前を送信します。 は、ここに私がやったことだ:

target.cs:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.Events; 

public class target : MonoBehaviour { 

     public UnityEvent damageEvent; 

    void Damage(float damage) 
    { 
     damageEvent.Invoke(); 
    }   
} 

次に、私は私のターゲットプレハブにし、インスペクタでクリックし、私は被害のイベントに「ScriptsHolder」を追加してみてください。ここに私の問題があります:私はダメージイベントにScriptsHolderを落と​​すことはできません。いくつかのテストを行いましたが、その理由は「ターゲット」がまだ私のシーンにないという事実のようです。

代わりにリスナーを追加する方法について説明しましたが、これを行う方法を理解できません。 "GameController.cs" でここで私が持っているもの

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.Events; 
public class GameController : MonoBehaviour { 
UnityEvent damageEvent; 
void Awake() 
{ 
    damageEvent.AddListener(targetReceivedDamage); 
} 
void targetReceivedDamage() 
{ // do some stuff } 
} 

しかし、それは動作しません。私は間違って何をしていますか?または、「ターゲット」がシーン内にないのに、ScriptsHolderをダメージイベントに追加するにはどうすればよいですか?

ご協力いただきありがとうございます。

答えて

2

ターゲットオブジェクトをインスタンス化するときにリスナーを追加する必要があります。例:

プレハブ宣言をターゲットタイプに変更し、インスペクタでターゲットプレハブを再割り当てします。

public Target targetPrefab; 

その後、

Target target = Instantiate(targetPrefab); 

target.damageEvent.AddListener(targetReceivedDamage); 

希望これは:)ご返信用

+0

おかげで役立ちますが、それを動作させることができない...それは言う: '" UnityEngine.GameObjectが含まれていません。 damageEventの定義 " – binoculars

+0

プレハブをターゲットとして宣言する必要があります。またはインスタンス化されたオブジェクトからコンポーネントを取得する必要があります。 –

関連する問題