【问题标题】:C# UnityEvents - OverrideC# UnityEvents - 覆盖
【发布时间】:2017-12-12 06:58:13
【问题描述】:

我一直在寻找解决问题的方法,但一无所获。

那么,我的问题是什么? 我有一个从 UnityEvent 扩展的类,它有 2 个虚拟方法,并且在另一个应该调用这些方法的文件中有公共标识符。但是当我将脚本放入检查器时,什么也没有发生(除了根虚拟方法)。

班级:

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

namespace Namespace {
    [System.Serializable]
    public class SomeClass : UnityEvent {
        public virtual void OnSomething(GameObject objectSender, GameObject objectAction) {

        }
        public virtual void OnSomethingElse(GameObject objectSender, GameObject objectAction) {
        }
    }
}

我在一个文件中覆盖了这些方法,但在下面显示的变量“脚本”中,但它们没有被覆盖。 并使用 SomeClass:

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

namespace Namespace {
    public class ActionListener : MonoBehaviour {
        public SomeClass script;

        // When I lose last hope
        // private void Start() {
        //  script.Invoke();
        //}
        public void OnHover(GameObject sender, GameObject action) {
            script.OnHoverListener(sender, action);
        }
        public void OnClick(GameObject sender, GameObject action) {
            script.OnClickListener(sender, action);
        }
    }
}

【问题讨论】:

  • script.OnHoverListener(args) 是 OnSomething(args)。这同样适用于 OnClickListener

标签: c# inheritance events unity5 extends


【解决方案1】:

我已经使用 MonoBehaviour 而不是 UnityEvent 解决了这个问题。

看起来不是这样的

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

namespace Namespace {
    public class SomeClass : MonoBehaviour {
        public virtual void OnSomething(GameObject objectSender, GameObject objectAction) {

        }
        public virtual void OnSomethingElse(GameObject objectSender, GameObject objectAction) {
        }
    }
}

正在使用中

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

namespace Namespace {
    public class ActionListener : MonoBehaviour {
        public SomeClass script;

        public void OnHover(GameObject sender, GameObject action) {
            script.OnSomething(sender, action);
        }
        public void OnClick(GameObject sender, GameObject action) {
            script.OnSomethingElse(sender, action);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2012-12-17
    • 2017-02-25
    相关资源
    最近更新 更多