使用工具:
unity 2021.2.8f1c1
visual studio 2022
插件:
Joystick Pack
准备工作:
1.新建一个plane(作为地面),一个胶囊体(作为玩家),并在胶囊体上添加刚体组件,限制XYZ三轴旋转
2.新建一个画布Canvas(用于显示摇杆),更改UI Scale Mode的模式为
Sxale With Screen Size,设置好屏幕分辨率大小(调整画布大小)
3.将项目文件夹下的Joystick Pack的Prefabs(摇杆预制件),拖到Hierarchy窗口下的Canvas下,并调整好位置和摇杆大小,我这里使用 Variable Joystick
我这里进行了重命名,方便区分
4.新建一个脚本,用于控制玩家移动和旋转
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMR : MonoBehaviour
{
public Joystick moveStick;//玩家移动摇杆
public Joystick rotationStick;//玩家旋转摇杆
Rigidbody myRigidbody;//玩家刚体
public float speed = 6f;//玩家移动速度
public float turnspeed = 10f;//玩家旋转速度
Vector3 movement; //玩家移动三维坐标
private void Awake()
{
myRigidbody = GetComponent<Rigidbody>();//获取刚体组件
}
void Update()
{
//玩家移动实现
float mh = moveStick.Horizontal;
float mv = moveStick.Vertical;
Move(mh, mv);
//玩家旋转实现
float rh = rotationStick.Horizontal;
float rv = rotationStick.Vertical;
Rotating(rh, rv);
}
//玩家移动控制
public void Move(float h, float v)
{
//根据输入的虚拟轴值设置变量
movement.Set(h, 0f, v);
// 单位化位移向量并根据速度得到需要移动的向量
movement = movement.normalized * speed * Time.deltaTime;
// 根据移动向量 移动玩家到相应位置
myRigidbody.MovePosition(transform.position + movement);
}
//玩家旋转控制
public void Rotating(float h, float v)
{
//获取方向
Vector3 dir = new Vector3(h, 0, v);
//将方向转换为四元数
Quaternion quaDir = Quaternion.LookRotation(dir, Vector3.up);
//缓慢转动到目标点
transform.rotation = Quaternion.Lerp(transform.rotation, quaDir, Time.fixedDeltaTime * turnspeed);
}
}
5.将脚本挂载到胶囊体(玩家),并绑定摇杆