unity 双摇杆控制教程(方向和旋转)

2023-12-15 05:20:31

使用工具:

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.将脚本挂载到胶囊体(玩家),并绑定摇杆


?

文章来源:https://blog.csdn.net/m0_69824302/article/details/134970834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。