首页 > 解决方案 > OnDelta 编辑器中未显示矢量参数的函数 // Unity 2019.2.6f1

问题描述

我正在使用 Lean Touch+ Asset 来实现 3D 对象的拖放。不幸的是,所需的函数没有出现在 OnDelta() 事件编辑器中。

事件检查器

该示例正在运行,但显示在事件编辑器中。我还尝试了一个较旧的 2018 统一版本,它工作正常。无论如何,我想使用较新的。如果我将 Vector2 更改为浮点数,它会在编辑器中列出,但 Vector2 应该也能正常工作还是我错了?

这段代码不完整,因为它不是我的,我不确定我是否可以分享它。但我希望它有助于理解我的问题。

using UnityEngine;

namespace Lean.Touch
{
[HelpURL(LeanTouch.PlusHelpUrlPrefix + "LeanManualTranslate")]
[AddComponentMenu(LeanTouch.ComponentPathPrefix + "Manual Translate")]

public class LeanManualTranslate : MonoBehaviour
{
    public void TranslateAB(Vector2 magnitude)
    {
        Translate(DirectionA * magnitude.x + DirectionB * magnitude.y);
    }

标签: unity3d

解决方案


基本上有两种类型的回调UnityEvent

  • 静态
    静态调用是预配置的调用,具有在 UI 中设置的预配置值。这意味着当调用回调时,目标函数会使用已输入 UI 的参数来调用。

  • 动态
    动态调用是使用从代码发送的参数调用的,它绑定到正在调用的 UnityEvent 的类型。UI 过滤回调并仅显示对 UnityEvent 有效的动态调用。

UI这里指的是 Unty Editor 中的 Inspector。

但是.. 不幸的是,较新版本中存在一个错误,因此动态参数目前无法使用UnityEvent
(固定在2019.3并且2020.1......不要使用它们,因为它们仍处于 Alpha 和 Beta 状态!)


一般来说,在选择静态Vector2回调类型时,afaik 绝不是要通过检查器显示和编辑的参数,并且仅适用于将其传递给动态回调。

只有基本类型,如、 、intstring引用适用于静态类型。floatboolObject


作为一种解决方法,您仍然可以通过脚本在运行时添加回调 - 虽然它有点糟糕,并且只有当目标组件与具有UnityEvent

public class LeanManualTranslate : MonoBehaviour
{
    private void Awake()
    {
        GetComponent<LeanMultiSet>().OnDelta.AddCallback(TranslateAB);
    }

    private void TranslateAB(Vector2 magnitude)
    {
        Translate(DirectionA * magnitude.x + DirectionB * magnitude.y);
    }
}

或者,也可以坚持2019.1.14它的工作原理。似乎引入了错误,因为2019.2


推荐阅读