我有一个GUI纹理,并附加以下脚本:
using UnityEngine;
using System.Collections;
public class moveUP : MonoBehaviour {
public float moveSpeed=3f;
public GameObject player;
void OnGUI() {
if (Input.GetMouseButton(0))
player.transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);
}
它不仅可以在我单击GUI纹理时使用,还可以在我点击屏幕时使用。
我该如何解决这个问题?
或者,如果您有任何其他脚本用于移动具有GUI纹理的播放器,请随时与我分享。
答案 0 :(得分:1)
将OnGUI
更改为Update
void Update() {
if (Input.GetMouseButton(0))
player.transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);
}
答案 1 :(得分:0)
OnMouseDown()?
OnMouseDown()
。
答案 2 :(得分:0)
Unity文档说必须从Input.GetMouseDown
例程调用Update()
函数。正如Savlon所说,只要你用鼠标点击它就会运行该功能,无论你在哪里,所以你应该使用GUI的事件。
因此,您必须使用接口IPointerDownHandler
并实现其方法OnPointerDown()
。
public class moveUP : MonoBehaviour, IPointerDownHandler
{
...
public void OnPointerDown(PointerEventData pointerEventData)
{
//Do something, like move...
}
}
脚本必须具有您希望行为具有的元素。有关更多详细信息,请参阅Unity的UnityEngine.EventSystems中有关事件的文档。