【发布时间】:2018-12-29 02:25:01
【问题描述】:
我的场景中有 4 个“GameObjectONE”实例。附加到 GameObjectONE 的脚本调用委托。我的场景中有另一个名为 GameObjectTwo 的对象。附加到 GameObjectTwo 的脚本包含一个订阅 GameObjectONE 调用的委托的函数。但是,该函数被调用了 4 次。我猜那是因为场景中有 4 个 GameObjectONE 副本。无论如何,无论场景中存在多少 GameObjectONE 实例,是否只调用一次 GameObjectTwo 内部的函数?
这是伪代码,但它显示了我想要实现的目标
using System;
using UnityEngine;
public class GameObjectONE : MonoBehaviour
{
public static event Action<Vector3> OnClick;
private void Update()
{
if (currentlySelected)
if (clickedOnTerrain)
{
var clickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
OnClick?.Invoke(clickPos);
MoveToTarget();
}
}
}
二等
using UnityEngine;
public class GameObjectTWO : MonoBehaviour
{
private void Awake()
{
GameObjectONE.OnClick += AssignTargets;
}
private void OnDestroy()
{
GameObjectONE.OnClick -= AssignTargets;
}
private void AssignTargets(Vector3 clickPos)
{
//Based on the click position, find and assign a target for each unit.
}
}
【问题讨论】:
-
我会说所有四个对象都满足在 GameObjectONE 上调用事件的条件,因此它们都调用静态事件。
标签: c# unity3d events delegates action