软件编程
位置:首页>> 软件编程>> C#编程>> Unity3D实现虚拟按钮控制人物移动效果

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

作者:shenqingyu0605202324  发布时间:2022-06-13 04:26:26 

标签:Unity3D,按钮,移动

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

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

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

在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来控制玩家移动了。

来源:https://blog.csdn.net/shenqingyu0605202324/article/details/78440792

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com