Unity角色或摄像机移动和旋转的控制脚本

该脚本挂载到需要被移动、旋转控制的物体身上,也可以之间挂在到摄像机上!

挂载到摄像机上可以实现第一人称视角控制!

挂载到物体身上,配合摄像机跟踪脚本可以实现,第三人称视角控制! 

第一人称视角

将角色控制脚本挂给摄像机即可!

以下是角色控制脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterControl : MonoBehaviour
{    
    public float MoveSpeed = 50f; //用来提供移动旋转速度
    public float RotateSpeed = 30f;

    /// <summary>
    /// 这个变量是主角Y轴旋转的角度
    /// </summary>
    private float rotationY = 0f;
    /// <summary>
    /// 这个变量是主角X轴旋转的角度
    /// </summary>
    private float rotationX = 0f;
    void Start()
    {
        //从场景中分别拿到所需的游戏物体
    }
    void LateUpdate()
    {  
        ControlRole();//用来控制物体移动和旋转
    }
   
    /// <summary>
    /// 控制主角物体移动旋转
    /// </summary>
    void ControlRole()
    {
        //控制脚本所在物体的移动;
        float X = Input.GetAxis("Horizontal");
        float Z = Input.GetAxis("Vertical");
        float Y = Input.GetAxis("Jump");
        transform.Translate(new Vector3(X * MoveSpeed * Time.deltaTime, Y * MoveSpeed * Time.deltaTime, Z * MoveSpeed * Time.deltaTime), Space.Self);
        //这个函数是获取WASD参数X,Y得到-1-1,然后赋值到三维向量作为移动函数的数值

        //接下来控制物体的旋转 当用户通过鼠标移动时,代码将根据用户的输入来旋转游戏对象。  
        float MouseXValue = Input.GetAxis("Mouse X");
        rotationY += MouseXValue * RotateSpeed * Time.deltaTime;
        //这段代码获取鼠标在水平方向上的移动值,并乘以旋转速度和时间增量。
        //然后将结果添加到 rotationY 变量中,以控制游戏对象绕 Y 轴的旋转

        float MouseYValue = Input.GetAxis("Mouse Y");
        rotationX -= MouseYValue * RotateSpeed * Time.deltaTime;
        //这段代码获取鼠标在垂直方向上的移动值,并乘以旋转速度和时间增量。
        //然后将结果减去 rotationX 变量中,以控制游戏对象绕 X 轴的旋转。

        transform.localRotation = Quaternion.Euler(rotationX, rotationY, 0f);
        //这段代码使用 Euler 角度创建一个新的旋转四元数,并将其应用于游戏对象的局部旋转。
        //通过设置 rotationX 和 rotationY 的值,可以控制游戏对象在 X 和 Y 轴上的旋转。
    }
    /// <summary>
    /// 限制一下上下旋转的角度
    /// </summary>
    void LimitRotateX()
    {

        if (rotationX < -360)
        {
            rotationX += 360;
        }
        if (rotationX > 360)
        {
            rotationX -= 360;
        }
        //限制单次旋转的最大角度,也就是不超过90度,也可以设置一个外部变量便于用户控制
        rotationX = Mathf.Clamp(rotationX, -90f, 90f);
    }
}//end class
 

第三人称

将上面, 角色控制脚本挂给模型,并添加一个摄像机追踪空物体,便于摄像机有一个追踪目标,然后把下面脚本挂给摄像机

附赠摄像机跟踪脚本(如果你角色控制脚本给了摄像机,那么这个脚本就不需要了)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Transform target; // 跟踪目标
    public float smoothTime = 0.3f; // 平滑时间

    private Vector3 velocity = Vector3.zero;

    void Update()
    {
        计算新的位置
        Vector3 targetPosition = target.TransformPoint(new Vector3(0,1,-5));//本地坐标转世界坐标
        平滑移动到新的位置
        transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
        transform.LookAt(target);
    }
}

 

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

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

相关文章

【Nuget】程序包源

程序包源地址(部分) Azure 中国区的官方 NuGet 程序包源地址 https://nuget.cdn.azure.cn/v3/index.json 官方 NuGet 程序包源地址 V2 https://www.nuget.org/api/v2 官方 NuGet 程序包源地址 V3 https://api.nuget.org/v3/index.json MyGet 上 Eto.Forms 框架的程序包源地址 h…

BUUCTF jarvisoj_level0 1

目录 一、分析二、EXP三、本地打不通&#xff1f;远程能打通&#xff1f; 一、分析 查看文件信息 关键信息 64位程序栈不可执行 IDA64反汇编 进入第一个函数 栈溢出 shift F12查找字符串 点进去 发现是一个后门函数 二、EXP from pwn import *context.arch amd64 #…

uni-app : 生成三位随机数、自定义全局变量、自定义全局函数、传参、多参数返回值

核心代码 function generateRandomNumber() {const min 100;const max 999;// 生成 min 到 max 之间的随机整数// Math.random() 函数返回一个大于等于 0 且小于 1 的随机浮点数。通过将其乘以 (max - min 1)&#xff0c;我们得到一个大于等于 0 且小于等于 (max - min 1…

【肌电信号】OpenSignals使用方法 --- 肌电信号采集及导入matlab

一、 多通道采集教学 1. 数据线连接 将PLUX设备通过USB或蓝牙与电脑连接&#xff0c;注意确认在几号通道接线。 2.实时数据采集可视化 进行设置。需要在软件中选择你的PLUX设备&#xff0c;并配置相关的参数&#xff0c;如采样率、分辨率、信号类型等 3 支持数据回放和…

只需根据接口文档,就能轻松开发 get 和 post 请求的脚本,你会做吗?

一般的接口文档描述的内容&#xff1a; 开发get请求的脚本&#xff0c;接口文档的描述如下&#xff1a; 在loadrunner里面创建一个空脚本&#xff1a; 在action空白处&#xff0c;点击insert—>step 输入web_custom_request&#xff0c;双击选择该函数&#xff0c;填入如下几…

什么是C++?

1.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机 界提出了OOP(object o…

智能AI创作系统ChatGPT详细搭建教程/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型

一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作…

Flex 词法分析实验实现(电子科技大学编译技术Icoding实验)

Flex 词法分析 此为电子科技大学编译技术 实验1&#xff1a;词法分析 将具体实现中的三个文件和自己的实验报告一起上传才能通过 根据词法分析实验中给定的文法&#xff0c;利用 flex 设计一词法分析器&#xff0c;该分析器从标准输入读入源代码后&#xff0c;输出单词的类别编…

C/C++陷阱——变量名和函数名的冲突问题

C语言/C陷阱——变量名和函数名的冲突问题 先来看这两串代码&#xff1a; 代码一&#xff1a; #include <stdio.h> #include <stdlib.h>int rand 1;int main() {printf("%d\n", rand);return 0; }代码二&#xff1a; #include <stdio.h> #inc…

基于php+thinkphp+vue的校园二手交易网站

运行环境 开发语言&#xff1a;PHP 数据库:MYSQL数据库 应用服务:apache服务器 使用框架:ThinkPHPvue 开发工具:VScode/Dreamweaver/PhpStorm等均可 项目简介 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发…

2024年计算机专业Java选题推荐✅(最新、最全、最容易通过的选择)

文章目录 前言选题和具体实现详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#x…

【LeetCode刷题(数据结构)】:对称二叉树

给你一个二叉树的根节点 root 检查它是否轴对称 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a; 树中节点数目在范围 [1, 1000] 内 -100 < Node.val < 100 对称二叉…

【Redis】Java客户端使用list命令

lpush/lrange rpush/rpop/lpop blpop/brpop llen

mac使⽤nginx

⽅法1&#xff1a;homebrew 默认本地已经安装homebrew&#xff1b; 安装与启动 brew install nginx 安装nginx&#xff1b; brew services start nginx 启动nginx nginx⽂件⽬录 1. nginx安装⽂件⽬录/usr/local/Cellar/nginx 2. nginx配置⽂件⽬录/usr/local/etc/nginx 3. con…

Windows 多媒体编程库 DirectX 介绍

目录 1、什么是DirectX&#xff1f; 2、使用DirectX的好处 2.1、DirectX为软件开发者提供硬件无关性 2.2、为硬件开发提供策略 3、DirectX的主体构成 3.1、Direct3D 3.2、DirectDraw 3.3、DirectPlay 3.4、DirectSound 3.5、DirectMusic 3.6、DirectInput 4、Dire…

lvgl 界面管理器

lv_scr_mgr lvgl 界面管理器 适配 lvgl 8.3 降低界面之间的耦合使用较小的内存&#xff0c;界面切换后会自动释放内存内存泄漏检测 使用方法 在lv_scr_mgr_port.h 中创建一个枚举&#xff0c;用于界面ID为每个界面创建一个页面管理器句柄将界面句柄添加到 lv_scr_mgr_por…

机器学习基础之《回归与聚类算法(2)—欠拟合与过拟合》

一、背景 1、上一篇说正规方程的时候&#xff0c;实际情况中使用很少&#xff0c;主要原因它不能解决过拟合。 2、训练集上表现的好&#xff0c;测试集上表现不好—过拟合 二、欠拟合和过拟合 1、欠拟合 训练集&#xff1a;有3个训练集&#xff0c;告诉机器都是天鹅 机器学…

Docker 构建Python镜像时,pip使用国内地址的dockerfile模版

一、问题现象 构建镜像时&#xff0c;使用pip命令打包报错&#xff1a; 二、问题根因 因国内无法访问pip的配置文件中的仓库地址 三、解决办法 这个办法同样适用于&#xff1a;物理机&#xff0c;这个地址是阿里云的 pip config set global.index-url http://mirrors.aliy…

WebAPI+EF连接SQL Server数据库

右击解决方案-添加-新建项目-选择“类库&#xff08;.NET Framework&#xff09;”,新建的项目取名叫WebApi1.EF 添加EF&#xff1a; 新建一个ADO实体数据模型 选择DBFirst 数据源选择MySql 填写数据库地址及账号密码 选择实体框架版本 选择在数据库中的表User 到此配置完成&am…

稚晖君项目复刻:L-ink门禁卡(1)——环境搭建与第一个项目创建

行文目录 前言其他文章正文开始STM32CubeMX安装STM32CubeMX安装L0的固件支持包Clion安装OpenOCD安装MinGw安装arm-none-eabi-gcc安装Clion配置 创建STM32工程创建STM32CubeMX工程更改芯片型号 参考文献 前言 其实关于稚晖君的L-ink门禁卡在我本科阶段就已经刷过好几次了&#x…