在Unity中制作响应式UIbutton的最佳方法

在这里输入图像说明 我一直坚持这个相当一段时间。 我正在尝试制作一款Android平台游戏,所以我需要一些触摸button。 我在Photoshop中做了一些button,但我无法弄清楚如何让他们正确地移动播放器。 我尝试过实现IPointerDownHandler接口,但是一旦我移动播放器,我无法阻止它,即使我在OnPointerUp调用函数来将播放器的速度设置为一个新的vector3,其中所有值都为零。 我也尝试将事件触发器附加到我所做的button上,但是相反,玩家只能移动一帧,然后再次按下button。 我不想从资产商店导入任何资产,也不想使用gui系统。 我想学习如何自己做。 提前致谢。 这里是我从我的PlayerController调用函数的脚本。

 using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections; public class LeftButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { public Image leftButton; private PlayerController player; private void Start() { leftButton = GetComponent<Image> (); player = FindObjectOfType<PlayerController> (); } public virtual void OnPointerDown(PointerEventData ped) { Debug.Log("LeftButton Pressed!!"); player.moveLeft (-2); } public virtual void OnPointerUp(PointerEventData ped) { player.stopMoving (); Debug.Log ("Button Lifted!!"); } } 

这是我的PlayerController脚本。

 using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { private Rigidbody2D myrb; // Use this for initialization void Start () { myrb = GetComponent<Rigidbody2D> (); } // Update is called once per frame void Update () { } public void moveLeft(float moveSpeed) { myrb.velocity = new Vector3 (moveSpeed, myrb.velocity.y, 0f); } public void moveRight(float moveSpeed) { myrb.velocity = new Vector3 (moveSpeed, myrb.velocity.y, 0f); } public void stopMoving() { myrb.velocity = new Vector3 (0f, 0f, 0f); } } 

您可以简单地通过添加两个Event Trigger与UIbutton来完成。 一个调用PointerEnter的公共方法。 另一个调用PointerExit的公共方法。

PointerEnter触发器中调用移动对象的方法并在PointerExit触发器中调用停止移动的方法。

基地事件