代码之家  ›  专栏  ›  技术社区  ›  Sean Carey

订阅多次调用的委托

  •  0
  • Sean Carey  · 技术社区  · 7 年前

    我的场景中有4个“GameObjectONE”的实例。附加到GameObjectONE的脚本调用委托。我的场景中还有一个叫做gameobject2的对象。附加到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.
    }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   rootpanthera    7 年前
    1. 使GameObjectONE中的事件成为静态的(因此它与对象无关)。
    2. 在GameObjectTWO中,通过调用类方法(不是对象)订阅此事件

      GameObjectONE.OnEventThatIsFiredByGameObjectOne+=。。。