Unity3D实现虚拟按钮控制人物移动效果

时间:2021-05-20

本文为大家分享了Unity3D实现虚拟按钮控制人物移动的具体代码,供大家参考,具体内容如下

创建Image的UI组件,在Image下新建一个Button按钮。在Image 和Button上拖进Sprite图片

在Button按钮上挂载该脚本

using System.Collections;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI; public class MyJoystick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { public Canvas canvas; public static float h; //h和v的值传回给player脚本,使得物体移动 public static float v; private bool isPress = false; //Button按钮是否按下 private Vector2 touchPos = Vector2.zero; //按下的位置 void Update() { if (isPress) { RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, Input.mousePosition, null, out touchPos); //根据Canvas和Image的Rectransform位置相减得出 touchPos += new Vector2(427, 299); float distance = Vector2.Distance(Vector2.zero, touchPos); if (distance > 52) { //限制Button不能超出Image位置(两者位置相减得出52) touchPos = touchPos.normalized*52; transform.localPosition = touchPos; } else { transform.localPosition = touchPos; } h = touchPos.x / 52; v = touchPos.y / 52; } } //鼠标按下时触发 public void OnPointerDown(PointerEventData eventData) { isPress = true; } //鼠标按键弹起时触发 public void OnPointerUp(PointerEventData eventData) { isPress = false; transform.localPosition = Vector3.zero; } }

在玩家身上挂载控制玩家移动的脚本

using System.Collections;using System.Collections.Generic;using UnityEngine; public class PlayerMove : MonoBehaviour { public float speed = 0.1f; private float h = 0; private float v = 0; void Update() { //首先检测虚拟按键有没有移动,没有再选择键盘输入 if (Mathf.Abs(MyJoystick.h) > 0 || Mathf.Abs(MyJoystick.v) > 0) { h = MyJoystick.h; v = MyJoystick.v; } else{ h = Input.GetAxis("Horizontal"); v = Input.GetAxis("Vertical"); } //玩家位置移动 if (Mathf.Abs(h) > 0.1 || Mathf.Abs(v) > 0.1) { Vector3 targetDir = new Vector3(h, 0, v); transform.position += targetDir * speed; transform.LookAt(transform.position+targetDir); } }}

这样,就能通过按下Button来控制玩家移动了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章