需要物体:一个用于移动的对象,一个主摄像机,一个地面对象,且摄像机的父结点为移动对象
旋转移动坐标示意图:

用于视角移动的代码(给摄像机的):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CameraTurn : MonoBehaviour
{// 水平视角移动的敏感度public float sensitivityHor = 3f;// 垂直视角移动的敏感度public float sensitivityVer = 3f;// 视角向上移动的角度范围,该值越小范围越大public float upVer = -40;// 视角向下移动的角度范围,该值越大范围越大public float downVer = 45;// 垂直旋转角度private float rotVer;// 旋转的方向问题// x 表示绕 x 轴旋转,即 前上后 的角度// y 表示绕 y 轴旋转,即 左前后 的角度// y 表示绕 y 轴旋转,即 左前后 的角度// Start is called before the first frame updatevoid Start(){// 初始化当前的垂直角度rotVer = transform.eulerAngles.x;}// Update is called once per framevoid Update(){// 获取鼠标上下的移动位置float mouseVer = Input.GetAxis("Mouse Y");// 获取鼠标左右的移动位置float mouseHor = Input.GetAxis("Mouse X");// 鼠标往上移动,视角其实是往下移,所以要想达到视角也往上移的话,就要减去它rotVer -= mouseVer * sensitivityVer;// 限定上下移动的视角范围,即垂直方向不能360度旋转rotVer = Mathf.Clamp(rotVer, upVer, downVer);// 水平移动float rotHor = transform.localEulerAngles.y + mouseHor * sensitivityHor;// 设置视角的移动值transform.localEulerAngles = new Vector3(rotVer, rotHor, 0);}
}

用于物体移动的控制器(给要移动的物体的):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;// 表示一定需要这个控件
[RequireComponent(typeof(CharacterController))]
public class Move : MonoBehaviour {// 获取摄像机对象的位置信息,[SerializeField] 类似于 java 的构造方法的方法参数[SerializeField] private Transform target;// 跳起来的速度public float jumpSpeed = 15.0f;// 重力public float gravity = -9.8f;// 最终垂直速度public float endsVelocity = -10.0f;// 在地面时的垂直速度public float minFall = -1.5f;// 跑起来的速度public float runSpeed = 10;// 走路的速度public float walkSpeed = 4;// 垂直速度private float verSpeed;// 移动的速度private float moveSpeed;// 用于存储当前的角色控件private CharacterController character;// 在被加载时执行void Start() {// 初始化character = GetComponent<CharacterController>();verSpeed = minFall;moveSpeed = walkSpeed;}// 每更新一帧时执行void Update() {// 用于存储移动信息Vector3 movement = Vector3.zero;// 获取左右方向的移动信息float horspeed = Input.GetAxis("Horizontal");// 获取前后方向的移动信息float verspeed = Input.GetAxis("Vertical");// 当发生了移动才执行if (horspeed != 0 || verspeed != 0) {// 设置左右位置movement.x = horspeed * moveSpeed;// 设置前后的位置movement.z = verspeed * moveSpeed;// 设置斜着走的最大速度更水平垂直走的速度一样movement = Vector3.ClampMagnitude(movement, moveSpeed);// 将移动的信息转化为以摄像机为全局坐标的位置,即保证你向前走一定是摄像机的视角方向movement = target.TransformDirection(movement);}// 当按下左 shift 是跟换速度if (Input.GetKey(KeyCode.LeftShift)) {moveSpeed = runSpeed;} else {moveSpeed = walkSpeed;}// 角色控件自带的一个方法,用于检测是否在地面if (character.isGrounded) {// 按了空格键则给垂直方向施加一个速度if (Input.GetButtonDown("Jump")) {verSpeed = jumpSpeed;} else {verSpeed = minFall;}} else {// 若已经跳起来了则将垂直方向的速度递减降低,来达到一个 下上下 的一个效果// Time.deltaTime 表示为每秒的刷新频率的倒数,用来控制每台电脑的移动速度都是一样的verSpeed += gravity * 3 * Time.deltaTime;// 限制最大坠落速度if (verSpeed < endsVelocity) {verSpeed = endsVelocity;}}// 给移动一个垂直速度movement.y = verSpeed;// 控制速度movement *= Time.deltaTime;// 角色控件自带的一个方法,若用 transform.Translate() 的话会无视碰撞器character.Move(movement);}
}

Unity3D-实现第一人称人物动作: 走,跑,跳,移动视角相关推荐

  1. 虚幻——动画蓝图、状态机制作人物走跑跳动作

    一.名词解释 序列--一段动作. 混合空间--混合不同的动作.将多个序列排序播放. 动画蓝图--根据状态播放不同的动画. 二.混合空间制作走跑动作 由于走和跑的动作比较连续,并且都是由速度控制,所以要 ...

  2. Unity 第一人称、第三人称、漫游视角 控制器.

    前言 这是以前写的人物控制器(包含第一人称.第三人称.漫游视角),这里做个记录,方便后续参考使用. 实现 模型使用官方的,操作使用鼠标右键控制视角,键盘WASD.Shift控制人物移动. 切换到漫游视 ...

  3. unity3d实现第一人称射击游戏之CS反恐精英(二)(人物的移动和场景的碰撞关系)

    上一节我们简单的实现了第一人称的移动,但是只是让枪有了漫游的效果,本章来实现它的物理效果. 1 先给枪添加一个碰撞器组件,为了简单我们添加一个box collider来模拟碰撞 调整下碰撞器大小,将它 ...

  4. unity3d实现第一人称射击游戏之CS反恐精英(三)(人物旋转限制和跳跃功能(消除连跳,碰撞消除,高度稳定))

    1旋转限制 上文实现的代码,我们的人物可以后空翻和前空翻,这不是我们想要的,所以我们需要对视角进行限定. 先分析一下,人物抬头不能让他超过某个角度,也就是抬头的时候我们人物的z轴和世界的y轴的夹角不能 ...

  5. unity3d实现第一人称射击游戏之CS反恐精英(四)(子弹模块,音效特效)

    实现思想 由于子弹的速度非常快,直接让子弹像现实中那样移动很容易发生'穿模'现象,所以我们用unity中的射线来实现,当用户点击鼠标左键的时候,播放开枪动画,火花特效,开火音效,枪口发射一条射线,检测 ...

  6. unity3d实现第一人称射击游戏之CS反恐精英(一)(第一人称移动)

    学习unity有一段时间了,自己准备做一个cs的项目来巩固并且提升自己. 第一步:搭建场景 因为这个游戏只针对游戏逻辑为重点,所以搭建场景和人物素材我都从unity asset store中的免费资源 ...

  7. unity3d实现第一人称射击游戏之CS反恐精英(六)(朝准星位置发射子弹,更换弹夹 )

    上一节将UI简单的布置了一下,下面来实现UI中当前子弹数和总子弹数和脚本的数据绑定,并且发射子弹要朝着准星的位置发射 1:子弹和显示UI的子弹数的实现思路:在枪攻击的脚本里添加当前子弹数和背包子弹数两 ...

  8. unity3d实现第一人称射击游戏之CS反恐精英(五)(第一视角UI搭建,血量,金钱,子弹,准心,倒计时)

    这一节内容比较简单,就是构建UI在摄像机屏幕上,让玩家可以看到人物的状态,血量,防弹衣,倒计时,金钱,子弹,准心 下面看一下效果图 最终效果是这样的,所有的布局全是用UGUI的TEXT组件添加的,需要 ...

  9. Unity3D——第一人称FPS生存游戏(resident zombies)

    游戏源文件和游戏试玩程序:链接: 链接:https://pan.baidu.com/s/1Ln2tFizqEO_uEoQhuxvgrQ?pwd=l6w0  提取码:l6w0 游戏思路前身搭建: 用一些 ...

最新文章

  1. Solidworks2017安装与破解
  2. 4、连接Mysql数据库
  3. 使用Spring的NamedParameterJdbcTemplate完成DAO操作
  4. P4123-[CQOI2016]不同的最小割【网络流,分治】
  5. 分析FLV文件分析和解析器的开源代码
  6. 嘿嘿~~大家一起来测测自己反映速度
  7. Orcale的存储过程
  8. jQuery 实现邮箱输入自动提示功能:(二)
  9. grep正则表达式详解及练习
  10. JS动态插入插件后,不能马上使用,必须刷新
  11. 如何将Eclipse设置为中文简体
  12. 3d人体智能测试软件,人体系统女性3Dapp
  13. 发现最新的区块链应用-8月16日
  14. cygwin安装配置apt-cyg工具
  15. PiscisOS开发笔记_1_PiscisOS的诞生和系统特性简介
  16. 综合日语第一册第十五课
  17. 【折腾服务器 1】妖板 Intel N5105 + i226 主板安装 ESXi 7.0 教程
  18. c语言科学记数法正确表示方法,输入: 用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 输出: 该...
  19. 华为端口聚合命令_华为交换机端口汇聚不同版本配置命令汇总
  20. c语言2逻辑与2是1吗,2.C语言逻辑运算符和表达式

热门文章

  1. 对虎牙直播进行爬取,并对信息进行处理分析
  2. 抖音矩阵系统,抖音矩阵系统源码定制 tell me
  3. 进制的运算(笔记借鉴编程达人)
  4. 随手笔记--为对象增加新的属性,拼接多个对象
  5. JSP中访问本地图片
  6. html图片的隐藏与显示,Jquery中使用show()与hide()方法动画显示和隐藏图片
  7. MMD导入unity中使用
  8. 计算机专业去空军地勤能干嘛,空军地勤退役后能干什么?
  9. Junit 的 @RunWith():Runner,即Junit的运行器
  10. web前端面试总结(自认为还算全面哈哈哈哈哈!!!)