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

使用工具:

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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现冒泡排序及其动图演示

冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。重复这个过程直到整个数列都是按照从小到大的顺序排列。 具体步骤如下&#xff1a; 比较相邻的两个元素&#xff0c;如果前…

hive聚合函数之排序

1 全局排序&#xff08;Order By&#xff09; Order By&#xff1a;全局排序&#xff0c;只有一个Reduce。 (1&#xff09;.使用Order By子句排序 asc&#xff08;ascend&#xff09;&#xff1a;升序&#xff08;默认&#xff09; desc&#xff08;descend&#xff09;&#…

分布式解决方案与实战

分布式多线程性能调优 使用多线程优化接口 //下单业务public Object order( long userId){long start System.currentTimeMillis();//方法的开始时间戳&#xff08;ms&#xff09;JSONObject orderInfo remoteService.createOrder(userId);Callable<JSONObject> calla…

c语言多线程队列实现

为了用c语言实现队列进行多线程通信&#xff0c;用于实现一个状态机。 下面是实现过程 1.实现多线程队列入栈和出栈&#xff0c;不加锁 发送线程发送字符1&#xff0c;接收线程接收字符并打印。 多线程没有加锁&#xff0c;会有危险 #include "stdio.h" #include …

C++笔记之system()用于在Qt中执行系统命令的习惯

C笔记之system()用于在Qt中执行系统命令的习惯 参考博文&#xff1a;qt-C笔记之std::tostring()、.toStdString()、.toLocal8Bit().constData()的使用场景 code review! 文章目录 C笔记之system()用于在Qt中执行系统命令的习惯一.一般我用的int system( const char *command…

HarmonyOS学习0基础版

1.安装并配置DevEco 访问 HUAWEI开发者官网 找到 DevEco点击下载,我这里以windows版为例 点击下载并安装 (安装时直接点击下一步下一步,然后运行安装好的DevEco) 注意&#xff1a;第一次安装没有开发环境的时候&#xff0c;这里点击Do not import settings&#xff0c;进入软…

modelbox线程爆满宕机bug

序 该bug的解决需要特别感谢张同学。有了大佬的帮助&#xff0c;这个bug才得以解决。 问题现象 modelbox可以进行模型推理&#xff0c;但压测一段时间后&#xff0c;modelbox会宕机&#xff0c;并发生段错误。 “libgomp: Thread creation failed: Resource temporarily una…

MacOS多屏状态栏位置不固定,程序坞不小心跑到副屏

目录 方式一&#xff1a;通过系统设置方式二&#xff1a;鼠标切换 MacOS多屏状态栏位置不固定&#xff0c;程序坞不小心跑到副屏 方式一&#xff1a;通过系统设置 先切换到左边 再切换到底部 就能回到主屏了 方式二&#xff1a;鼠标切换 我的两个屏幕放置位置如下 鼠标在…

OpenCV imencode 函数详解与应用示例

OpenCV imencode 函数详解与应用示例 介绍imencode 函数的基本信息示例代码应用场景 介绍 OpenCV是一个强大的计算机视觉库&#xff0c;提供了许多图像处理和分析的工具。imencode函数是其中之一&#xff0c;用于将图像编码为指定格式的字节流。这个函数对于图像的存储、传输和…

实验03:OSPF配置网络实验

1.实验目的&#xff1a; 本实验的主要目的是了解OSPF协议的基本概念、OSPF网络的配置及验证&#xff0c;通过实验来掌握OSPF协议的工作原理、配置方法、路由表的生成过程等。 2.实验内容&#xff1a; 设计一个拓扑结构&#xff0c;并在网络设备上进行配置&#xff1b;配置OS…

架构简洁之道有感,谈谈软件组件聚合的张力

配图由腾讯混元助手生成 这篇文章介绍了软件架构设计中组件设计思想&#xff0c;围绕“组件间聚合的张力”这个有意思的角度&#xff0c;介绍了概念&#xff0c;并且结合架构设计示例对这个概念进行了进一步阐述。 组件聚合&#xff1f;张力&#xff1f;这标题&#xff0c;有种…

华为HCIP认证H12-821题库下

26、6.交换技术核心知识 &#xff08;单选题&#xff09;某交换机运行RSTP协议&#xff0c;其相关配置信息如图所示,请根据命令配置情况指出对于Instance 1&#xff0c;该交换机的角色是: A、根交换机 B、非根交换机 C、交换机 D、无法判断 正确答案是&…

本地计算机连接两个Github账号

两个Github账号与本地计算机连接 注册Github账号Git的下载与安装生成SSH密钥为Github账户设置SSH Key编辑config文件连接Github仓库其它命令 注册Github账号 注册两个Github账号。这一步很简单&#xff0c;跟注册其它账号差不多。 Git的下载与安装 下载地址&#xff1a;http…

在C++中->运算符

在C中&#xff0c;->是一个运算符&#xff0c;称为成员访问运算符&#xff08;Member Access Operator&#xff09;。它用于通过指针访问对象的成员&#xff08;变量或函数&#xff09;。 下面是对->运算符的详细解释&#xff1a; 语法&#xff1a; pointer->member …

汽车锁行业分析:市场销量接近1700万台

汽车防盗锁根据技术原理基本上可划分为三类&#xff1a;机械防盗锁、电子防盗报警锁、联网的防盗抢(定位、跟踪)系统。汽车发动机防盗逻辑&#xff0c;点火开关打开时&#xff0c;钥匙转发器与防盗控制器形成首次信息交汇&#xff0c;钥匙与芯片互会识别码不同&#xff0c;防盗…

SQAlchemy 第二篇

使用数据库元数据 SQLAlchemy 中数据库元数据最常见的基础对象称为 MetaData、Table和Column。下面的部分将说明如何在面向 Core 的风格和面向 ORM 的风格中使用这些对象。 使用表对象设置元数据 当我们使用关系数据库时&#xff0c;我们查询的数据库中的基本数据保存结构称…

php使用OpenCV实现从照片中截取身份证区域照片

<?php // 获取上传的文件 $file $_FILES[file]; // 获取文件的临时名称 $tmp_name $file[tmp_name]; // 获取文件的类型 $type $file[type]; // 获取文件的大小 $size $file[size]; // 获取文件的错误信息 $error $file[error]; // 检查文件是否上传成功 if ($er…

Linux 服务管理和配置

这篇主要是围绕 systemd 的管理和配置&#xff0c;有新的认识会持续更新 一、服务管理 Centos 7 及后续版本 systemd # 无需重启&#xff0c;重新加载服务 一般用于配置文件变更后 systemctl reload daemon # 服务的开机自启动管理 systemctl enable/disable daemon # 服务状…

阶段五:深度学习和人工智能(学习人工智能的应用领域,如自然语言处理,计算机视觉等)

Python是人工智能领域最流行的编程语言之一&#xff0c;它具有简单易学、功能强大、库丰富等优点&#xff0c;因此在自然语言处理、计算机视觉等领域得到了广泛应用。 自然语言处理 自然语言处理是人工智能领域的一个重要分支&#xff0c;它主要研究如何让计算机理解和处理人…

Matlab绘图添加背景色,动态添加背景

Matlab绘图添加背景色&#xff0c;动态添加背景 有没有小伙伴想过绘制这种有背景的曲线图呢&#xff1f;因为矩形是背景&#xff0c;所以要先绘制&#xff0c;然后再绘制曲线&#xff0c;因此&#xff0c;最先想到的思路可能是&#xff1a;先绘制三个背景矩形&#xff0c;然后填…