Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何在Unity';什么是新的输入系统?_Unity3d - Fatal编程技术网

Unity3d 如何在Unity';什么是新的输入系统?

Unity3d 如何在Unity';什么是新的输入系统?,unity3d,Unity3d,Unity有一个新的输入系统,旧的OnMouseDown(){}不再工作 在文章中,他们提到用鼠标.current.leftButton.isPressed替换这个。 在其他论坛帖子中,他们提到了使用输入。 问题在于,这些选项检测场景中任何位置的鼠标单击,而不仅仅是在对象上: public InputAction clickAction; void Awake() { clickAction.performed += ctx => OnClickedTest(); } vo

Unity有一个新的输入系统,旧的
OnMouseDown(){}
不再工作

在文章中,他们提到用鼠标.current.leftButton.isPressed
替换这个。
在其他论坛帖子中,他们提到了使用
输入
。 问题在于,这些选项检测场景中任何位置的鼠标单击,而不仅仅是在对象上:

public InputAction clickAction;

void Awake() {
      clickAction.performed += ctx => OnClickedTest();
}

void OnClickedTest(){
      Debug.Log("You clicked anywhere on the screen!");
}

// this doesn't work anymore in the new system
void OnMouseDown(){
      Debug.Log("You clicked on this specific object!");
}

使用Unity中的新输入系统,如何检测鼠标在特定游戏对象上的点击?

确保场景中有一个带有
InputSystemUIInputModule
EventSystem
摄像机上的
PhysicsRaycaster
Physics2RayCaster
,然后在对象上使用
IPointerClickHandler
接口,对象本身或其子对象上有碰撞器:

 using UnityEngine;
 using UnityEngine.EventSystems;
 public class MyClass : MonoBehaviour, IPointerClickHandler {
    public void OnPointerClick (PointerEventData eventData)
    {
        Debug.Log ("clicked");
    }
 }

在场景中的某个位置使用以下代码:

使用UnityEngine.InputSystem;
使用UnityEngine;
公共类鼠标图标:MonoBehavior
{
[序列化字段]
私人摄像机;
私有输入点击;
无效唤醒()
{
单击=新输入(绑定:“/leftButton”);
单击。已执行+=ctx=>{
雷卡斯特击中;
Vector3 coor=Mouse.current.position.ReadValue();
如果(物理.光线投射(游戏摄影机.屏幕指针Toray(coor),出击))
{
hit.collider.GetComponent()?.OnClick();
}
};
单击.Enable();
}
}
您可以将
IClickable
界面添加到所有要响应点击的游戏对象:

公共接口可点击
{
void OnClick();
}

使用UnityEngine;
公共类ClickableObject:MonoBehavior,IClickable
{
公共void OnClick()
{
Log(“有人点击了我”);
}
}

但它不是新的输入系统。EventSystems来自Unity UI包。