【FPS游戏制作】Unity加入角色控制器控制人物的移动

在这里插入图片描述


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

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

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

🅰️



文章目录

    • 🅰️
    • 前言
    • 🎶(==A==) 1.资源的导入
    • 🎶(==B==) 2.动画的切入以及移动旋转相关
    • 🎶(==C==) 3.混合树的添加
    • 🎶(==D==) 4.第三人称的移动
    • 🅰️


前言


🎶(A 1.资源的导入


资源地址
在这里插入图片描述


🎶(B 2.动画的切入以及移动旋转相关


1.第一人称的移动——使用角色控制器

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  玩家的移动
//___________创建者:___秩沅____
//_____________________________________
//-------------------------------------
public class PlayerMove : MonoBehaviour
{
    private float vertical;
    private float horizontal;
    private float mousePosition;

    private CharacterController player; //角色控制器
    private Vector3 moveDerictor;       //移动的方向
    public  float  velocity = 1f;       //移动的速度
    public  float roVelocity = 10f;
    private Animator playerAnimatior;

    private void Awake()
    {
        player = GetComponent<CharacterController>();
        playerAnimatior = GetComponent<Animator>();
    }

    private void FixedUpdate()
    {
        vertical   =  Input.GetAxis("Vertical") ;
        horizontal =  Input.GetAxis("Horizontal") ;
        mousePosition = Input.GetAxis("Mouse X");

        //旋转
        transform.localRotation *= Quaternion.Euler(0,mousePosition*roVelocity,0);

        //移动
        if(Input.GetAxis("Vertical")!= 0 || Input.GetAxis("Horizontal")!= 0)
        {
            playerAnimatior.SetBool("move",true);
            moveDerictor = new Vector3(horizontal, 0, vertical);
            moveDerictor = moveDerictor.normalized;   //将方向变成单位向量
            player.SimpleMove( transform.forward + moveDerictor*velocity *Time.deltaTime );
            //rigidbody.MovePosition( transform.localPosition + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量
            //此时物体并非跟着自己的旋转方向进行移动而是根据自身位置进行改变
            //(白话:无法变成FPS的第一视角进行当前视角当前前进)
        }
        else
        {
            print(Input.GetAxis("Vertical"));
            print(Input.GetAxis("Horizontal"));

            playerAnimatior.SetBool("move", false); 
            playerAnimatior.SetBool("static", true);
        }
    }

    private void MouseRotation()
    {

    }
  
}

2.上帝视角的移动——使用刚体

  • 关于相机,此时理想的位置,应该是相机固定跟随在机器人的后面,所以此时需要参照物
    在这里插入图片描述

  • 代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  玩家的运动相关
//___________创建者:___秩沅____
//_____________________________________
//-------------------------------------
public class PlayerMove : MonoBehaviour
{
    private float vertical;
    private float horizontal;
    private float mousePosition; 

    private Rigidbody rigidbody;      //玩家的刚体组件
    private Vector3 moveDerictor;     //移动的方向
    public  float  velocity = 1f;     //移动的速度
    public  float roVelocity = 10f;
    private Animator playerAnimatior;

    private void Awake()
    {
        rigidbody = GetComponent<Rigidbody>();
        playerAnimatior = GetComponent<Animator>();
    }

    private void FixedUpdate()
    {
        vertical   =  Input.GetAxis("Vertical") ;
        horizontal =  Input.GetAxis("Horizontal") ;
        mousePosition = Input.GetAxis("Mouse X");

        //旋转
        transform.rotation *= Quaternion.Euler(0,mousePosition*roVelocity,0);

        //移动
        if(Input.GetAxis("Vertical")!= 0 || Input.GetAxis("Horizontal")!= 0)
        {
            playerAnimatior.SetBool("move",true);
            moveDerictor = new Vector3(horizontal, 0, vertical);
            moveDerictor = moveDerictor.normalized;   //将方向变成单位向量
            rigidbody.MovePosition( transform .position + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量
        }
        else
        {
            print(Input.GetAxis("Vertical"));
            print(Input.GetAxis("Horizontal"));

            playerAnimatior.SetBool("move", false); 
            playerAnimatior.SetBool("static", true);
        }
    }

    private void MouseRotation()
    {

    }
  
}


🎶(C 3.混合树的添加


在这里插入图片描述


🎶(D 4.第三人称的移动


在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  玩家的移动
//___________创建者:___秩沅____
//_____________________________________
//-------------------------------------
public class PlayerMove : MonoBehaviour
{
    private float vertical;
    private float horizontal;
    private float mousePosition;

    private CharacterController player; //角色控制器
    private Vector3 moveDerictor;       //移动的方向
    public  float  velocity = 2f;       //移动的速度
    public  float roVelocity = 10f;
    private Animator playerAnimatior;

    private void Awake()
    {
        player = GetComponent<CharacterController>();
        playerAnimatior = GetComponent<Animator>();
    }

    private void FixedUpdate()
    {
        vertical   =  Input.GetAxis("Vertical") ;
        horizontal =  - Input.GetAxis("Horizontal") ;
        mousePosition = Input.GetAxis("Mouse X");

        //旋转
        transform.localRotation *= Quaternion.Euler(0, mousePosition * roVelocity, 0);

        if (vertical != 0 ||horizontal != 0)
        {        
            //移动
            playerAnimatior.SetFloat("SpeedWS", (int)vertical);
            playerAnimatior.SetFloat("SpeedAD", (int)horizontal);
            moveDerictor = new Vector3(vertical, 0, horizontal);
            print(moveDerictor.normalized);
            /// moveDerictor = moveDerictor.normalized;   //将方向变成单位向量
            //transform.position= transform.position + moveDerictor.normalized*Time .deltaTime ;
            player.SimpleMove(transform.forward * vertical );
            player.SimpleMove(transform.right * -horizontal);

            //GetComponent<Rigidbody>().MovePosition( transform.localPosition + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量
            //此时物体并非跟着自己的旋转方向进行移动而是根据自身位置进行改变
            //(白话:无法变成FPS的第一视角进行当前视角当前前进)       
        }
    }

    private void MouseRotation()
    {

    }
  
}

🅰️


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

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

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

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

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

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

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


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


在这里插入图片描述


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

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

相关文章

解决gogs勾选“使用选定的文件和模板初始化仓库”报错500,gogs邮件发送失败,gogs邮件配置不生效,gogs自定义模板等问题

解决gogs勾选“使用选定的文件和模板初始化仓库”报错500,gogs邮件发送失败,gogs邮件配置不生效,gogs自定义模板等问题 前几天出了教程本地部署gogs&#xff0c;在后期运行时发现两个问题&#xff1a; 第一&#xff1a;邮件明明配置了&#xff0c;后台显示未配置&#xff0c;…

离线安装腾讯x5内核(附安装包下载地址)

背景&#xff1a;由于项目需要在一个定制android设备上播放RTSP流视频&#xff0c;设备自带的浏览器内核不支持RTSP流播放&#xff0c;这就导致我使用webview播放h5网址上的视频的时候&#xff0c;无法正常播放视频。在android手机上都是可以播放的&#xff0c;所以猜测是定制a…

ROS 2基础概念#1:计算图(Compute Graph)| ROS 2学习笔记

在ROS中&#xff0c;计算图&#xff08;ROS Compute Graph&#xff09;是一个核心概念&#xff0c;它描述了ROS节点之间的数据流动和通信方式。它不仅仅是一个通信网络&#xff0c;它也反映了ROS设计哲学的核心——灵活性、模块化和可重用性。通过细致探讨计算图的高级特性和实…

MySQL 逗号分隔查询--find_in_set()函数

业务场景&#xff1a; 在使用MySQL的时候&#xff0c;可能的某个字段存储的是一个英文逗号分割的字符串&#xff08;这里我们不讨论表设计的合理性&#xff09;&#xff0c;如图所示&#xff1a; 我们在查询的时候需要匹配逗号分割中的某个字符串&#xff0c;该怎么查询呢&am…

Linux按键输入实验-创建按键的设备节点

一. 简介 Linux内核针对 GPIO驱动开发,提供了 pinctrl子系统与gpio子系统,方便了 GPIO驱动程序的开发。 本文开始学习如何利用 Linux内核的 pinctrl子系统,与 gpio子系统提供的 API函数,开发按键驱动。 这里主要学习在设备树文件中创建按键的设备节点。 二. Linux按键…

配电房智能辅助监控系统设计

业务背景 工业企业、学校、医院、居民小区等单位有这海量的配电房&#xff0c;这些配电房内的配电设备种类多、运行环境复杂&#xff0c;存在各种各样的安全隐患。目前这些配电房主要依靠人员在场值守或巡检方式进行管理&#xff0c;但单纯的人工运维方式既成本高&#xff0c;…

完美解决git 执行git push origin master指令 报错command not found

问题描述 报错信息为&#xff1a;在提交项目时的操作&#xff1a;找不到命令行 解决方案 &#xff08;1&#xff09;可以通过如下命令进行代码合并【注&#xff1a;pullfetchmerge】 git pull --rebase origin master&#xff08;2&#xff09;再执行语句&#xff1a; git p…

抖音视频评论提取软件|视频数据批量采集工具

抖音视频评论批量下载软件是一款基于C#开发的高效工具&#xff0c;旨在帮助用户快速获取抖音视频评论数据。无论您是市场分析师、社交媒体管理者还是数据研究人员&#xff0c;这款软件都会成为您工作中不可或缺的利器。 软件的关键功能包括&#xff1a; 关键词搜索&#xff1…

90%电商APP已沦落至无人下载,用户主观意愿——是真正实用性价值!

90%电商APP已沦落至无人下载&#xff0c;用户主观意愿——是真正实用性价值&#xff01; 文丨微三云营销总监胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 引言&#xff1a;在互联网发展的大时代下&#xff0c;似乎每个月都有新的APP出现…

浅谈 Linux 网络编程 - Server 端模型、sockaddr、sockaddr_in 结构体

文章目录 前言前置知识Server 端核心模型 【重点】相关函数 【重点】socket 函数bind 函数listen 函数accept 函数close 函数 sockaddr 数据结构 【重点】 前言 本文主要是对 Linux 网络编程中&#xff0c;Server 端的模型、相关函数 以及 sockaddr、sockaddr_in 结构体做介绍…

Unity 使用脚本获取组件,代码生成预制体

代码获取组件 using System; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine;// 必须要继承 MonoBehaviour 才是一个组件 // 类名必要与文件名一致public class c1 : MonoBehaviour {// 使用 public 初始变量时…

从零开始手写RPC框架(1)

学习java后端也有一段时间了&#xff0c;在网上寻一些教程和github上的开源库&#xff0c;学习从零开始手写一个RPC&#xff0c;学习各位大牛的代码适当修改&#xff0c;并贴上自己的一些见解和注释。 目录 RPC简介RPC和HttpClient的区别和共同点常见RPC框架 RPC框架设计常见序…

线性规划的标准型转换

对于任意给定的线性规划的问题,其实其本身可能是不符合线性规划标准型的需求的,但是如果通过一系列的等价变化的话,是可以将该问题转换为标准型的线性规划问题,例如如下的线性规划问题: 添加图片注释,不超过 140 字(可选) 给定的线性规划问题存在若干方面不满足最小值,…

就业班 2401--2.26 Linux Day5--进程管理一

一、权限扩展 文件权限管理之&#xff1a; 隐藏权限防止root误删除 文件属性添加与查看 [rootlinux-server ~]# touch file1 file2 file3 1.查看文件属性 [rootlinux-server ~]# lsattr file1 file2 file3 ---------------- file1 ---------------- file2 ----------------…

Vivado时序报告之Check_timing详解

目录 一、前言 二、Check_Timing 2.1 含义解释 2.2 工程代码 2.3 时序约束 2.4 Check_timing报告 no clock pulse_width_clock unconstrained_internal_endpoints no_input_delay no_output_delay multiple_clock generated_clocks loops partial_input_delay …

在 Python 中确定一个数字是否等于 0,考虑精度问题

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在 Python 中&#xff0c;特别是在处理浮点数时&#xff0c;确定一个数字是否等于 0 时&#xff0c;必须考虑精度问题。由于计算机使用二进制表示数字&#xff0c;浮点运算可能会引入微小的误差。这意味…

2024年抖店创业项目分享,新手不能错过的教程分享,快收藏!

大家好&#xff0c;我是电商花花。 在我看来&#xff0c;2024年最受欢迎的电商创业项目还得是抖音小店无货源&#xff0c;我依然看好今年抖音电商的市场&#xff0c;并且对于抖音小店我们会做&#xff0c;会一直做下去。 抖音一直都属于兴趣电商&#xff0c;会根据你的兴趣去…

.Encryptedd@mailfence.com.faust勒索病毒数据怎么处理|数据解密恢复

导言&#xff1a; 在数字时代的今天&#xff0c;我们享受着科技带来的便利和创新&#xff0c;但也要时刻警惕着隐患。勒索软件就是其中之一&#xff0c;它们以一种毒害般的形式悄然而至&#xff0c;将我们的数字世界变得一片混乱。今天&#xff0c;我们要聚焦的是 .Encrypted…

ModStartCMS v8.1.0 图片前端压缩,抖音授权登录

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

价格战打响!阿里云服务器和腾讯云服务器价格对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器62元一年&#xff0c;2核2G3M、2核4G、4核8G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配置价格表…