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

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

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

Unity3D实现虚拟按钮控制人物移动效果_第1张图片

在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实现虚拟按钮控制人物移动效果)