unity3d 菜鸟问题:如何将水平/垂直轴绑定到4个触摸按钮?

您所在的位置:网站首页 unity菜鸟教程 unity3d 菜鸟问题:如何将水平/垂直轴绑定到4个触摸按钮?

unity3d 菜鸟问题:如何将水平/垂直轴绑定到4个触摸按钮?

2023-03-09 04:10| 来源: 网络整理| 查看: 265

没有任何直接内置的东西可以提供UnityEngine.UI.Button或其他对象的当前按下状态。但是您可以使用IPointerXYHandler接口来实现,例如

public class PressedState : MonoBehaviour, IPointerEnerHandler, IPointerExitHandler, IPointerDownHander, IPointerUpHandler { [SerializeField] Button _button; public bool isPressed { get; private set; } public void OnPointerEnter(PointerEventData pointerEventData) { // not needed only required for handling exit } public void OnPointerExit(PointerEventData pointerEventData) { isPressed = false; } public void OnPointerDown(PointerEventData pointerEventData) { isPressed = true; } public void OnPointerUp(PointerEventData pointerEventData) { isPressed = false; } }在UI上,这是开箱即用的,如果您的按钮是3D碰撞器,您需要在相机上安装PhysicsRaycaster,如果是2D碰撞器,则需要安装PhyicsRaycaster2D。*

然后把这个连接到所有四个按钮上,并像这样处理它们。

public class Movement : MonoBehaviour { [SerializeField] PressedState up; [SerializeField] PressedState down; [SerializeField] PressedState left; [SerializeField] PressedState right; void Update() { var vertical = 0; if(up.isPressed) vertical += 1f; if(down.isPressed) vertical -= 1f; var horizontal = 0; if(right.isPressed) horizontal += 1f; if(left.isPressed) horizontal -= 1f; var Vec = transform.localPosition; Vec.x += horizontal * Time.deltaTime * 20; Vec.y += vertical * Time.deltaTime * 20; transform.localPosition = Vec; } }

确切地说,GetAxis应用了某种平滑,如果您确实需要,您可以使用Mathf.SmoothDamp等选项添加平滑边注:一般来说,你通常希望避免更快的对角线移动,所以我可能宁愿使用

var movement = Vector2.ClampMagnitude(new Vector2(horizontal, vertical), 1f) * Time.deltaTime * 20; transform.localPosition += movement;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3