无法让对象响应右键单击

本文关键字:右键 单击 响应 对象 | 更新日期: 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;
         }
     }
 }