C#OnMouseUp()不起作用

时间:2018-03-19 01:43:12

标签: c# unity3d

我一直在搜索很多相关的问题,但我仍然无法弄清楚为什么我的OnMouseUp()无效。

我想使用脚本Mover通过左键单击对象选择它来提升游戏对象,并在任何地方右键单击取消它。

以下是游戏对象的信息。它确实有一个对撞机,所以我不知道我做错了什么。

enter image description here

以下是Mover的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Mover : MonoBehaviour {

    private bool selected;

    // Use this for initialization
    void Start () {
        selected = false;
    }

    // Update is called once per frame
    void Update () {
        Vector3 pos = GetComponent<Rigidbody>().position;
        if (Input.GetMouseButtonUp(1) && selected)
        {
            GetComponent<Rigidbody>().position = new Vector3(pos.x, pos.y - 1f, pos.z);
            selected = false;
        }
    }

    void OnMouseUp()
    {
        Vector3 pos = GetComponent<Rigidbody>().position;
        if (!selected)
        {
            GetComponent<Rigidbody>().position = new Vector3(pos.x, pos.y + 1f, pos.z);
            selected = true;
        }
        Debug.Log("OnMouseUp!");
    }
}

debug.log也不会出现。

--- ---更新

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class Mover : MonoBehaviour, IPointerEnterHandler
{

    private bool selected;

    void Start () {
        selected = false;
        addPhysicsRaycaster();
    }

    void Update () {
        Vector3 pos = GetComponent<Rigidbody>().position;
        if (Input.GetMouseButtonUp(1) && selected)
        {
            GetComponent<Rigidbody>().position = new Vector3(pos.x, pos.y - 1f, pos.z);
            selected = false;
        }
    }

    void addPhysicsRaycaster()
    {
        PhysicsRaycaster physicsRaycaster = GameObject.FindObjectOfType<PhysicsRaycaster>();
        if (physicsRaycaster == null)
        {
            Camera.main.gameObject.AddComponent<PhysicsRaycaster>();
        }
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        Vector3 pos = GetComponent<Rigidbody>().position;
        if (!selected)
        {
            GetComponent<Rigidbody>().position = new Vector3(pos.x, pos.y + 1f, pos.z);
            selected = true;
        }
        Debug.Log("OnPointerEnter!");
    }
}

1 个答案:

答案 0 :(得分:0)

检查网格对撞机中的“触发器”,同时确保你的对撞机在那里,你可以尝试使用不同的对撞机(例如箱式对撞机),如果它仍然不起作用。

  

在属于Ignore Raycast图层的对象上不会调用此函数。

     

当且仅当标记为触发器的碰撞器上调用此函数   Physics.queriesHitTriggers是真的。

请详细了解统一文档https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseUp.html