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…

iOS AVAudioRecorder简介

1. AVAudioRecorder应用 AVAudioRecorder的主要属性 // 是否在录制中 property(readonly, getterisRecording) BOOL recording; // 录音本地文件地址 property(readonly) NSURL *url; // 录音文件配置 property(readonly) NSDictionary<NSString *, id> *settings;// 录…

BUUCTF jarvisoj_level0 1

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

nginx日志切割/截断

前言 略 nginx日志切割 将日志文件重命名。nginx重载配置文件。添加定时任务。 PS&#xff1a;ngxin 在 linux中&#xff0c;会按天切割日志。如果想要随时切割日志&#xff0c;同理。 nginx重载配置文件命令 nginx.exe -s reopenwindows日志切割 将下面的文件保存为bat…

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

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

Java设计模式之职责链模式

职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;用于将请求的发送者和接收者解耦&#xff0c;并使多个对象都有机会处理这个请求。在职责链模式中&#xff0c;请求沿着一个链传递&#xff0c;直到有一个对象处理它为止。 …

【肌电信号】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;填入如下几…

【Linux】常用命令

目录 文件解压缩服务器文件互传scprsync 进程资源网络curl发送简单get请求发送 POST 请求发送 JSON 数据保存响应到文件 文件 ls,打印当前目录下所有文件和目录; ls -l,打印每个文件的基本信息 pwd,查看当前目录的路径 查看文件 catless&#xff1a;可以左右滚动阅读more :翻…

什么是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;输出单词的类别编…

Feign 调用为何POST不支持同时传入多个SpringQueryMap对象,但是GET方法就支持?

Feign 调用为何POST不支持同时传入多个SpringQueryMap对象&#xff0c;但是GET方法就支持&#xff1f; 1.1 问题背景1.2 原因分析1.3 修复方案1.3.1 修复方案一 切换使用GET方法&#xff0c;可以试用多个SpringQueryMap注解 &#xff08;测试实际不行&#xff09;1.3.2 修复方案…

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…

C++ 线程安全注解

实例开篇 线程安全注解是现代C开发的机制&#xff0c;通常在编译期可以帮助发现一些线程安全问题。 下面直接从实例中来理解。 class Account { private:Mutex mu;int money GUARDED_BY(mu);void Sub(int amount) {money - amount; // writing variable money requires h…

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

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

43.241.18.123哪些问题会导致服务器里面时间错误

我们在使用服务器的过程中&#xff0c;有时候可能会发现&#xff0c;服务器里面时间跟标准的时间对不上&#xff0c;那服务器里面时间错误可能由哪些问题引起&#xff1a; 硬件问题&#xff1a;服务器硬件中的时钟或电池可能损坏或失效&#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 对称二叉…

Aviator表达式引擎

一、快速介绍 &#xff08;一&#xff09;Aviator Aviator是一个用于动态表达式求值的高性能、轻量级Java引擎。以下是一些关于Aviator引擎的重要特点和设计目标&#xff1a; 轻量级和高性能&#xff1a; Aviator的设计目标之一是轻量级和高性能。它的大小很小&#xff0c;加…