unity3d - 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);
}
解决方案
基本上有两种类型的回调UnityEvent
静态
静态调用是预配置的调用,具有在 UI 中设置的预配置值。这意味着当调用回调时,目标函数会使用已输入 UI 的参数来调用。动态
动态调用是使用从代码发送的参数调用的,它绑定到正在调用的 UnityEvent 的类型。UI 过滤回调并仅显示对 UnityEvent 有效的动态调用。
UI
这里指的是 Unty Editor 中的 Inspector。
但是.. 不幸的是,较新版本中存在一个错误,因此动态参数目前无法使用UnityEvent
。
(固定在2019.3
并且2020.1
......不要使用它们,因为它们仍处于 Alpha 和 Beta 状态!)
一般来说,在选择静态Vector2
回调类型时,afaik 绝不是要通过检查器显示和编辑的参数,并且仅适用于将其传递给动态回调。
只有基本类型,如、 、int
和string
引用适用于静态类型。float
bool
Object
作为一种解决方法,您仍然可以通过脚本在运行时添加回调 - 虽然它有点糟糕,并且只有当目标组件与具有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
推荐阅读
- azure - Azure.Storage.Blobs.BlobServiceClient CopyFromUri() 在返回最新的 ETag 之前似乎没有完成复制
- javascript - JS:不确定为什么函数返回
- reactjs - 从域调用时,Firebase 函数不执行
- python - Python WebScraping FlashScore
- ios - 如何使用附加数据将 apns 令牌发送到服务器
- python - 我怎样才能将我的整数输入分成 2 位数字,剩下的一位数字为一位?
- c# - C# .NET core 3 MVC 脚手架与 EntityFrameworkCore
- django - Django:tinymce HTML 格式
- reactjs - 定义回调参考 TypeScript 和 react-slick 库
- python - 为什么我的代码真的很慢,我该如何改进它?