C# 使用GUI纹理移动播放器
我有一个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纹理移动播
使用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...
}
}