C# 使用GUI纹理移动播放器

C# 使用GUI纹理移动播放器,c#,user-interface,unity3d,C#,User Interface,Unity3d,我有一个GUI纹理,并附加了以下脚本: 使用UnityEngine; 使用系统集合; 公共阶级升级:单一行为{ 公共浮动速度=3f; 公共游戏对象玩家; void OnGUI(){ if(输入。GetMouseButton(0)) player.transform.Translate(Vector3.up*moveSpeed*Time.deltaTime); } 它不仅在我点击GUI纹理时有效,而且在我点击屏幕的任何地方都有效 我怎样才能解决这个问题 或者,如果您有任何其他使用GUI纹理移动播

我有一个GUI纹理,并附加了以下脚本:

使用UnityEngine;
使用系统集合;
公共阶级升级:单一行为{
公共浮动速度=3f;
公共游戏对象玩家;
void OnGUI(){
if(输入。GetMouseButton(0))
player.transform.Translate(Vector3.up*moveSpeed*Time.deltaTime);
}
它不仅在我点击GUI纹理时有效,而且在我点击屏幕的任何地方都有效

我怎样才能解决这个问题


或者,如果您有任何其他使用GUI纹理移动播放器的脚本,请随时与我共享。

关于
OnMouseDown()?


当用户在GUI元素或碰撞器上按下鼠标按钮时,调用
OnMouseDown()

Unity文档说明必须从
Update()调用
Input.GetMouseDown
函数
routine。正如Savlon所说,无论您在何处单击鼠标,该功能都会运行,因此您应该在GUI中使用事件

因此,您必须使用接口
ipInterDownHandler
,并实现其方法
OnPointerDown()


脚本必须具有您希望行为具有的元素。有关更多详细信息,请参阅unity在UnityEngine.EventSystems中关于事件的文档。

OnGUI
更改为
更新

void Update(){
if(输入。GetMouseButton(0))
player.transform.Translate(Vector3.up*moveSpeed*Time.deltaTime);
}

您当前正在检查鼠标左键是否按下、移动……您还应该检查鼠标位置是否在gui纹理内……您可以使用gui纹理矩形和.contains(event.current.mousePosition)来完成此操作;明白吗?
public class moveUP : MonoBehaviour, IPointerDownHandler
{
    ...

    public void OnPointerDown(PointerEventData pointerEventData)
    {
        //Do something, like move...
    }
}