【0到1学习Unity脚本编程】第一人称视角的角色控制器

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:【0到1】Unity脚本游戏开发宝典

🅰️



文章目录

    • 🅰️
    • 第一人称视角的角色控制器
    • 🎶(==1==) 场景创建
    • 🎶(==2==) 相机设置
    • 🎶(==3==) 初步脚本
    • 🎶(==4==) 优化脚本
    • 🅰️


第一人称视角的角色控制器


🎶(1 场景创建


在这里插入图片描述


🎶(2 相机设置


  • 将摄像机变为胶囊体的子物体,按住 ctrl +shift +F 调整视野。让他变成胶囊体的眼睛
    在这里插入图片描述

🎶(3 初步脚本


在这里插入图片描述

  • 判断要前进时按照哪个方向前进,一般UnityZ轴为前后UnityX轴为左右,
  • 判断要旋转,是按照哪个轴进行旋转(左右视角,是旋转Y轴,上下视角是旋转Z轴)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    [ExecuteAlways]
    private float  moveSpeed =  1f;
    [ExecuteAlways]
    private float  rotateSpeed = 1f;
    
    void Update()
    {
        Move();
    }

    private void Move()
    { 
        float xPosition = Input.GetAxis("Horizontal") * Time.deltaTime;  //水平轴向
        float zPosition = Input.GetAxis("Vertical") * Time.deltaTime;    //垂直轴向
        
        //旋转不用加TimedeleTime ,因为加上会变得很慢

        float YRotation = Input.GetAxis("Mouse X");
        float XRotation = -Input.GetAxis("Mouse Y");

       
        transform.position += new Vector3(xPosition ,0 , zPosition) * moveSpeed  ;
   
        Quaternion rotateAngle = Quaternion.Euler(XRotation, YRotation, 0);  //欧拉角转换成四元数

        transform.rotation *= rotateAngle;  //乘上一个四元数就相当于进行了旋转     
    }
}

在这里插入图片描述


🎶(4 优化脚本


  • 优化1:纵轴的视野,变化幅度太大,需要进行约束
  • 优化2:点击开始时,隐藏鼠标,并将其固定到中央确保,开始时的屏幕是正的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    [SerializeField]
    private float  moveSpeed =  5f;
    [SerializeField]
    private float  rotateSpeed = 1f;

    private void Start()
    {
        Cursor.visible = false; //鼠标隐藏
        Cursor.lockState = CursorLockMode.Locked;//将光标锁定到“游戏”视图的中心。
    }

    private void Update()
    {
        Move();
    }

    private void Move()
    { 
        float xPosition = Input.GetAxis("Horizontal") * Time.deltaTime;  //水平轴向
        float zPosition = Input.GetAxis("Vertical") * Time.deltaTime;    //垂直轴向
        
        //旋转不用加TimedeleTime ,因为加上会变得很慢

        float YRotation = Input.GetAxis("Mouse X");
        float XRotation = -Input.GetAxis("Mouse Y");
        
        //进行抬头约束(速度减慢的效果)
        XRotation = Mathf.Clamp(XRotation , -0.1f ,0.1f);
      
        transform.position += new Vector3(xPosition ,0 , zPosition) * moveSpeed  ;
   
        Quaternion rotateAngle = Quaternion.Euler(XRotation, YRotation, 0);  //欧拉角转换成四元数

        transform.rotation *= rotateAngle;  //乘上一个四元数就相当于进行了旋转     
    }
}

在这里插入图片描述

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Gradle-13】SNAPSHOT版本检查

1、什么是SNAPSHOT SNAPSHOT版本是指尚未发布的版本,是一个「动态版本」,它始终指向最新的发布工件(gav),也就是说同一个SNAPSHOT版本可以反复用来发布。 这种情况在大型app多团队的开发中比较常见,比如us…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

系列四、强引用、软引用、弱引用、虚引用分别是什么?

一、整体架构 二、强引用(默认支持模式) 2.1、概述 当内存不足时,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。 强引用是我们最常见的普通对象引用,只…

Gin框架源码解析

概要 目录 Gin路由详解 Gin框架路由之Radix Tree 一、路由树节点 二、请求方法树 三、路由注册以及匹配 中间件含义 Gin框架中的中间件 主要讲述Gin框架路由和中间件的详细解释。本文章将从Radix树(基数树或者压缩前缀树)、请求处理、路由方法树…

hypermesh学习总结(一)

1、hypermesh导入导出 2、hypermesh如何使用拓扑命令,连接多个几何体为一个? 3、hypermesh模式选择 分别有显示动力学模式explicit,标准模式Standard3D(静力学及模态等)

Linux之进程概念(一)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、冯诺依曼体系结构二、操作系统(Operator System)1、概念2、设计OS的目的3、定位4、如何理…

2024年csdn最新最全的Postman接口测试: postman实现参数化

什么时候会用到参数化 比如:一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块:正确的用户名,密码 成功;错误的用户名,正确的密码 失败 postman实现参数化 在实际的接口测试中,部分参数…

弗洛伊德算法(C++)

目录 介绍: 代码: 结果: 介绍: 弗洛伊德算法(Floyd algorithm)也称为Floyd-Warshall算法,是一种用于求解所有节点对之间的最短路径的动态规划算法。它使用了一个二维数组来存储所有节点…

深入解析具名导入es6规范中的具名导入是在做解构吗

先说答案,不是 尽管es6的具名导入和语法非常相似 es6赋值解构 const obj {a: 1,f() {this.a}}const { a, f } objes6具名导入 //导出文件代码export let a 1export function f() {a}export default {a,f}//导入文件代码import { a, f } from ./tsVolution可以看出…

Unity2021及以上 启动或者禁用自动刷新

Unity 2021以以上启动自动刷新 Edit---> Preferences--> Asset Pipline --> Auto Refresh 禁用的结果 如果不启动自动刷新在Project面板选择Refresh是不会刷新已经修改后的脚本的。

10_6 input输入子系统,流程解析

简单分层 应用层 内核层 --------------------------- input handler 数据处理层 driver/input/evdev.c1.和用户空间交互,实现fops2.不知道数据怎么得到的,但是可以把数据上传给用户--------------------------- input core层1.维护上面和下面的两个链表2.为上下两层提供接口--…

智慧路灯控制系统设计方案思路及设计原则

智慧路灯系统依托于智慧路灯综合管理平台,实现点(智慧路灯)、线(道路)、面(城市)的三级监控,实现灯控、屏控、视频监控、数据采集、联动的统一。 1)一个城市的智慧路灯系…

Shell判断:流程控制—if(三)

一、调试脚本 1、调试脚本的其他方法: [rootlocalhost ~] # sh -n useradd.sh 仅调试脚本中的语法错误。 [rootlocalhost ~]# sh -vx useradd.sh 以调试的方式执行,查询整个执行过程。 2、示例: [rootlocalhost ~]# sh -n useradd.sh #调…

【数据结构&C++】二叉平衡搜索树-AVL树(25)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.AVL树的概念二.AVL树节点的定义(代码…

OpenHarmony源码下载

OpenHarmony源码下载 现在的 OpenHarmony 4.0 源码已经有了,在 https://gitee.com/openharmony 地址中,描述了源码获取的方式,但那是基于 ubuntu 或者说是 Linux 的下载方式。在 windows 平台下的下载方式没有做出介绍。 我自己尝试了 wind…

linux文件IO

文件IO截断 截断对文件的偏移量没有影响。

【Go入门】 Go如何使得Web工作

【Go入门】 Go如何使得Web工作 前面小节介绍了如何通过Go搭建一个Web服务,我们可以看到简单应用一个net/http包就方便的搭建起来了。那么Go在底层到底是怎么做的呢?万变不离其宗,Go的Web服务工作也离不开我们第一小节介绍的Web工作方式。 w…

简单聊一聊幂等和防重

大家好,我是G探险者。 每年的双十一,618,电商系统都会面临这超高的流量,如果一个订单被反复提交,那电商系统如何保证这个订单之后执行一次减库存,扣款的操作? 这里就引入两个概念,…

python-opencv 培训课程笔记(1)

python-opencv 培训课程笔记(1) 博主参加了一次opencv库的培训课程,把课程所学整理成笔记,供大家学习,第一次课程包括如下内容: 1.读取图像 2.保存图像 3.使用opencv库显示图像 4.读取图像为灰度图像 …

常见树种(贵州省):003柏类

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、柏木 …
最新文章