无法让对象响应右键单击
本文关键字:右键 单击 响应 对象 | 更新日期: 2023-09-27 17:55:21
所以我正在尝试做这件事,如果我左键单击一个对象,1 被添加到一个变量中,如果我右键单击它,从该变量中减去 1。左键单击工作正常,但是当我右键单击时,没有任何反应。
public class cs_SliderClick : MonoBehaviour
{
public int sliderValue;
void Start ()
{
}
void Update ()
{
}
public void OnMouseDown()
{
if (Input.GetMouseButtonDown(0))
{
sliderValue += 1;
}
if (Input.GetMouseButtonDown(1))
{
sliderValue -= 1;
}
}
}
谁能告诉我我在这里做错了什么?
谢谢。
你需要
使用Unity的EventSystems
。
实现IPointerClickHandler
,然后重写OnPointerClick
函数。
如果游戏对象是 3D 网格,请将PhysicsRaycaster
附加到摄像机。如果这是一个2D游戏,则Physics2DRaycaster
连接到相机。
以下是您的固定代码:
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class cs_SliderClick : MonoBehaviour, IPointerClickHandler
{
public int sliderValue;
void Start()
{
//Attach PhysicsRaycaster to the Camera. Replace this with Physics2DRaycaster if the GameObject is a 2D Object/sprite
Camera.main.gameObject.AddComponent<PhysicsRaycaster>();
addEventSystem();
}
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
{
Debug.Log("Left click");
sliderValue += 1;
}
else if (eventData.button == PointerEventData.InputButton.Right)
{
Debug.Log("Right click");
sliderValue -= 1;
}
}
//Add Event System to the Camera
void addEventSystem()
{
GameObject eventSystem = null;
GameObject tempObj = GameObject.Find("EventSystem");
if (tempObj == null)
{
eventSystem = new GameObject("EventSystem");
eventSystem.AddComponent<EventSystem>();
eventSystem.AddComponent<StandaloneInputModule>();
}
else
{
if ((tempObj.GetComponent<EventSystem>()) == null)
{
tempObj.AddComponent<EventSystem>();
}
if ((tempObj.GetComponent<StandaloneInputModule>()) == null)
{
tempObj.AddComponent<StandaloneInputModule>();
}
}
}
}
所以我建议在更新方法中调用OnMouseDown()函数。
public class cs_SliderClick : MonoBehaviour {
public int sliderValue;
void Start ()
{
}
void Update ()
{
OnMouseDown();
}
public void OnMouseDown()
{
if (Input.GetMouseButtonDown(0))
{
sliderValue += 1;
}
if (Input.GetMouseButtonDown(1))
{
sliderValue -= 1;
}
}
}