unity 中private void OnPointerUp(PointerEventData eventData) { if (EventSystem.current.IsPointerOverGameObject(eventData.pointerId)) { //Debug.Log("EventSystem.current.IsPointerOverGameObject"); } else { //先关闭所有 OpenManager.Instance.CloseShowUI(); Debug.Log("空引用追踪 11"); foreach (var da in ShowTypes) { Debug.Log("空引用追踪 22"); //再调用展示方法 //OpenManager.Instance.ShowMessage(da.my_ShowType, System.IO.Path.Combine(Application.streamingAssetsPath, da.path)); OpenManager.Instance.ShowMessage(da.my_ShowType, da.path); } } }这个函数历史哪里调用的?
时间: 2024-02-14 21:32:58 浏览: 149
这个函数是 Unity UI 中的事件处理函数,用于处理 UI 元素上的触摸事件。在 Unity 中,当您点击或触摸 UI 元素时,会触发一系列事件,如 PointerDown、PointerUp、Drag、Click 等。这些事件的处理函数可以通过在代码中继承相应的接口来实现,例如:
- PointerDown:IPointerDownHandler
- PointerUp:IPointerUpHandler
- Drag:IDragHandler
- Click:IPointerClickHandler
在上面的代码中,private void OnPointerUp(PointerEventData eventData) 就是 IPointerUpHandler 接口的事件处理函数,用于在触摸离开 UI 元素时执行相应的代码。在该函数中,我们首先检测当前是否有 UI 元素被选中,然后根据需要执行相应的业务逻辑。
相关问题
unity中 private void OnMouseUp() { if (EventSystem.current.IsPointerOverGameObject()) { //Debug.Log("EventSystem.current.IsPointerOverGameObject"); } else { //先关闭所有 OpenManager.Instance.CloseShowUI(); Debug.Log("空引用追踪 11"); foreach (var da in ShowTypes) { Debug.Log("空引用追踪 22"); //再调用展示方法 //OpenManager.Instance.ShowMessage(da.my_ShowType, System.IO.Path.Combine(Application.streamingAssetsPath, da.path)); OpenManager.Instance.ShowMessage(da.my_ShowType, da.path); } } }这个函数修改为安卓可用
您可以把 OnMouseUp() 方法修改为 OnPointerUp() 方法,这个方法在安卓平台和其他移动设备上是有效的。同时,您需要使用 EventSystem.current.currentSelectedGameObject 来检测当前是否有 UI 元素被选中,代码如下:
```csharp
using UnityEngine.EventSystems;
private void OnPointerUp(PointerEventData eventData)
{
if (EventSystem.current.IsPointerOverGameObject(eventData.pointerId))
{
//Debug.Log("EventSystem.current.IsPointerOverGameObject");
}
else
{
//先关闭所有
OpenManager.Instance.CloseShowUI();
Debug.Log("空引用追踪 11");
foreach (var da in ShowTypes)
{
Debug.Log("空引用追踪 22");
//再调用展示方法
//OpenManager.Instance.ShowMessage(da.my_ShowType, System.IO.Path.Combine(Application.streamingAssetsPath, da.path));
OpenManager.Instance.ShowMessage(da.my_ShowType, da.path);
}
}
}
```
注意,您需要在代码文件的开头添加 using UnityEngine.EventSystems; 来引用 EventSystem 类。
NullReferenceException: Object reference not set to an instance of an object Inventory.OnClickPickUp () (at Assets/Script/Inventory.cs:39) UnityEngine.Events.InvokableCall.Invoke () (at <ff7b004c24954ff98f68a709be4708c3>:0) UnityEngine.Events.UnityEvent.Invoke () (at <ff7b004c24954ff98f68a709be4708c3>:0) UnityEngine.UI.Button.Press () (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:68) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:110) UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:261) UnityEngine.EventSystems.EventSystem:Update() (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/EventSystem.cs:377)
这是一个 NullReferenceException 异常,在调用 Inventory.cs 脚本的 OnClickPickUp() 函数的时候发生了错误。可能是因为对象的引用未被正确初始化,导致出现了 "Object reference not set to an instance of an object" 的错误。你需要检查 Inventory.cs 中的代码,确认所有的对象都被正确地初始化并且没有为空的引用。另外,也需要检查你的按钮是否正确绑定了 OnClickPickUp() 函数。
阅读全文