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

本文为大家分享了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来控制玩家移动了。

以上是 Unity3D实现虚拟按钮控制人物移动效果 的全部内容, 来源链接: utcz.com/z/328647.html

回到顶部