unity 双摇杆控制教程(方向和旋转)
空梦゛
2022年03月25日 21:27
收录于文集
共12篇

效果演示:

使用工具:

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.新建一个脚本,用于控制玩家移动和旋转

代码块
text/x-csharp
自动换行
复制代码
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.将脚本挂载到胶囊体(玩家),并绑定摇杆

运行效果:

为了方便演示,我添加了一个粉色小球。