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