我一直在搜索很多相关的问题,但我仍然无法弄清楚为什么我的OnMouseUp()无效。
我想使用脚本Mover通过左键单击对象选择它来提升游戏对象,并在任何地方右键单击取消它。
以下是游戏对象的信息。它确实有一个对撞机,所以我不知道我做错了什么。
以下是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!");
}
}
答案 0 :(得分:0)
检查网格对撞机中的“触发器”,同时确保你的对撞机在那里,你可以尝试使用不同的对撞机(例如箱式对撞机),如果它仍然不起作用。
在属于Ignore Raycast图层的对象上不会调用此函数。
当且仅当标记为触发器的碰撞器上调用此函数 Physics.queriesHitTriggers是真的。
请详细了解统一文档https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseUp.html