Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式将侦听器添加到预制中的UnityEvent_C#_Events_Unity3d - Fatal编程技术网

C# 如何以编程方式将侦听器添加到预制中的UnityEvent

C# 如何以编程方式将侦听器添加到预制中的UnityEvent,c#,events,unity3d,C#,Events,Unity3d,我读到了UnityEvent,并试图实现它 我有一个“GameController.cs”脚本,连接到一个游戏对象“ScriptsHolder”,还有一个“target.cs”脚本,连接到一个名为“target”的预制游戏对象 启动时,“目标”不在场景中:我在某个点启动多个目标,这些目标被重命名为“target0”、“target1” 当目标受到伤害时,我希望它将自己的名字发送到GameController.cs,它有一个空洞可以摧毁该对象。 以下是我所做的: target.cs: using

我读到了UnityEvent,并试图实现它

我有一个“GameController.cs”脚本,连接到一个游戏对象“ScriptsHolder”,还有一个“target.cs”脚本,连接到一个名为“target”的预制游戏对象

启动时,“目标”不在场景中:我在某个点启动多个目标,这些目标被重命名为“target0”、“target1”

当目标受到伤害时,我希望它将自己的名字发送到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();
     }        
 }
接下来,我点击我的目标预置,在inspector中,我尝试将“ScriptsHolder”添加到伤害事件中。这是我的问题:我不能在破坏事件中放弃ScriptsHolder。做了一些测试,原因似乎是“目标”还没有出现在我的场景中

所以我读到了关于添加一个侦听器的内容,但我不知道该怎么做

下面是我在“GameController.cs”中看到的内容:

但这不起作用。我做错了什么?或者,即使“目标”不在场景中,我如何将ScriptsHolder添加到伤害事件中


非常感谢您的帮助

实例化目标对象时,需要添加侦听器。例如:

将预置声明更改为目标类型,并在inspector中重新指定目标预置

public Target targetPrefab;
然后


希望这有帮助:)

在实例化目标对象时,需要添加侦听器。例如:

将预置声明更改为目标类型,并在inspector中重新指定目标预置

public Target targetPrefab;
然后


希望这有帮助:)

谢谢你的回复,但无法让它工作。。。它说:
“UnityEngine.GameObject不包含damageEvent的定义”
您必须将预置声明为目标。或者您必须从实例化对象获取组件。感谢您的回复,但无法使其工作。。。它说:
“UnityEngine.GameObject不包含damageEvent的定义”
您必须将预置声明为目标。或者您必须从实例化的对象获取组件。
Target target = Instantiate(targetPrefab);

target.damageEvent.AddListener(targetReceivedDamage);