使用CharacterController组件制作Fps角色控制器

2.1鼠标控制视角在X,Y轴旋转

新建FPMouseLook脚本

    private Transform cameraTransform;   private Vector3 cameraRotation; //保存每一帧存储下的坐标信息public float mouseSesitivity;//修改鼠标灵敏度public Vector2 maxMinAngle;//限制垂直视角区域void Start(){cameraTransform = transform;}void Update(){var mouseX = Input.GetAxis("Mouse X");//将鼠标输入的X值赋予mouseXvar mouseY = Input.GetAxis("Mouse Y"); //将鼠标输入的Y值赋予mouseYcameraRotation.y += mouseX * mouseSesitivity;//Y轴想要旋转需要在X轴移动cameraRotation.x -= mouseY * mouseSesitivity;//X轴想要旋转需要在Y轴移动cameraRotation.x = Mathf.Clamp(cameraRotation.x, maxMinAngle.x, maxMinAngle.y);//cameraRotation.x的值控制在maxMinAngle.x和maxMinAngle.y两个值之间cameraTransform.rotation = Quaternion.Euler(cameraRotation.x, cameraRotation.y, 0);//更新相机的旋转角度

2.2通过控制CharacterController组件,进行移动,跳跃

新建FPCharacterControllerMovement脚本

public class FPCharacterControllerMovement : MonoBehaviour
{private CharacterController characterController; //玩家身上的CharacterController组件private Transform characterTransform;//玩家位置信息private Vector3 movementDirection;public float movementSpeed;//移动速度public float gravity = 9.8f;//重力public float jumpHeight;//角色跳跃高度void Start(){characterController = GetComponent<CharacterController>();//获取组件characterTransform = transform;//获取玩家坐标信息     }void Update(){if (characterController.isGrounded)//CharacterController的isGrounded函数,判断玩家是否处于地面,如果玩家不处于运动状态则不能更改isGrounded的值{var horizontal = Input.GetAxis("Horizontal");var vertical = Input.GetAxis("Vertical");movementDirection = characterTransform.TransformDirection(new Vector3(horizontal, 0, vertical));//移动的方向if (Input.GetButtonDown("Jump"))//当摁下跳跃键,改变玩家的y轴{movementDirection.y = jumpHeight;}}movementDirection.y -= gravity * Time.deltaTime;characterController.Move(movementSpeed * Time.deltaTime * movementDirection);//以自定速度向指定方向移动,不具备重力}
}

2.3完成下蹲,奔跑,行走功能

这里用到了三目运算Input.GetKey(KeyCode.LeftShift) ? runSpeed : walkSpeed;

“?后的是满足前面条件时,:后是不满足时。”

相当于if(KeyCode.LeftShift){runSpeed}else{walkSpeed}

下蹲主要修改玩家身上的Character Controller组件中的Height变量

实现下蹲功能,下蹲行走和奔跑速度的切换。判断是否下蹲,是的话再分别修改其行走和奔跑的速度。

修改FPCharacterControllerMovement脚本

public class FPCharacterControllerMovement : MonoBehaviour
{private CharacterController characterController; //玩家身上的CharacterController组件private Transform characterTransform;//玩家位置信息private Vector3 movementDirection;public float runSpeed;//奔跑速度public float walkSpeed;//行走速度public float gravity = 9.8f;//重力public float jumpHeight;//角色跳跃高度public float crouchHeight;//下蹲的高度private float oldHeight;//原来高度public bool isCrouched;//判断是否蹲下public float crouchRunSpeed;//下蹲奔跑速度public float crouchwalkSpeed;//下蹲行走速度void Start(){characterController = GetComponent<CharacterController>();//获取组件characterTransform = transform;//获取玩家坐标信息     oldHeight = characterController.height;//获取原来高度}void Update(){float currentSpeed = walkSpeed;//声明一个临时变量存储当前速度if (characterController.isGrounded)//CharacterController的isGrounded函数,判断玩家是否处于地面,如果玩家不处于运动状态则不能更改isGrounded的值{var horizontal = Input.GetAxis("Horizontal");var vertical = Input.GetAxis("Vertical");movementDirection = characterTransform.TransformDirection(new Vector3(horizontal, 0, vertical));//移动的方向if (Input.GetButtonDown("Jump"))//当摁下跳跃键,改变玩家的y轴{movementDirection.y = jumpHeight;}  if (Input.GetKeyDown(KeyCode.C)){//判断是否蹲下,如果蹲下返回站立高度,如果目前是站立返回下蹲高度,将高度传入协程函数的参数中var currentHight = isCrouched ? oldHeight : crouchHeight;StartCoroutine(DoCrouch(currentHight));//使用协程函数isCrouched = !isCrouched;//将下蹲状态重置为对立状态}if (isCrouched)//{//三目运算符,判断下蹲状态是否摁下LeftShift,是的话执行crouchRunSpeed,否crouchwalkSpeed,赋值给当前速度currentSpeed = Input.GetKey(KeyCode.LeftShift) ? crouchRunSpeed : crouchwalkSpeed;}else{//三目运算符,判断是否摁下LeftShift,是的话执行runSpeed,否walkSpeed,赋值给当前速度currentSpeed = Input.GetKey(KeyCode.LeftShift) ? runSpeed : walkSpeed;} }movementDirection.y -= gravity * Time.deltaTime;//重力下落characterController.Move(currentSpeed * Time.deltaTime * movementDirection);//以自定速度向指定方向移动,不具备重力}private IEnumerator DoCrouch(float target)//进行蹲起高度渐变修改的协程函数{while (Mathf.Abs(characterController.height - target) > 0.1f)//当当前角色高度减去1的时候大于0.1执行此代码{float currentHeight = 0;//定义一个高度返回值yield return null;//要记得返回下 不然协程会卡掉characterController.height = Mathf.SmoothDamp(characterController.height, target, ref currentHeight, Time.deltaTime * 5);//渐渐过度效果}}
}

【UnityFPS射击游戏】(2)制作FPS角色控制器方法②相关推荐

  1. 【UnityFPS射击游戏】(1)制作FPS角色控制器方法①

    使用Rigbody&Capsule Collider制作FPS角色控制器 1.1鼠标控制视角在X轴,Y轴旋转 通过鼠标移动视角的代码,此代码放在相机身上 新建[FPMouseLook]脚本 p ...

  2. 【UE4 第一人称射击游戏】05-设置角色动画

    素材资料地址: 链接:https://pan.baidu.com/s/1epyD62jpOZg-o4NjWEjiyg 密码:jlhr 效果: 步骤: 1.新建一个名为"Character&q ...

  3. 【Unity2D好项目分享】用全是好活制作横版卷轴射击游戏①简单制作滚动卷轴以及玩家移动

    B站完整视频:[完结]Unity横版卷轴射击游戏制作教程 [满满的全是干货] 独立游戏 | 游戏开发_哔哩哔哩_bilibili➤内容简介 -- Unity游戏制作要领- 从无到有制作一个完整游戏的全 ...

  4. 【UE4 第一人称射击游戏】18-添加角色换弹时的动作

    上一篇: [UE4 第一人称射击游戏]17-重写换弹逻辑 本篇效果: 步骤: 1.打开"SWAT_AnimBP",在动画图表中,添加一个名为"Reloading" ...

  5. 3dMax游戏建模制作动画技巧、方法总结

    基本操作 打开默认动画面板:自定义->显示UI->显示轨迹栏 调整帧的密度:Ctrl + Alt + 鼠标右键 切换线框和实体显示: F3 .增加线框 F4 多选子物体:选中多个根节点后 ...

  6. unity 3d原创制作射击游戏(全完整版+安卓apk编译)

    目录 文章目录 目录 实验一 (1)设计如下UI界面,其中包含了canvas.Panel.Text.Button.Image.RawImage等UI元素 (2)实现点击Play按钮转换场景,点击Exi ...

  7. unity 3d 原创制作射击游戏(一)

    目录 实验一... 4 (1)设计如下UI界面,其中包含了canvas.Panel.Text.Button.Image.RawImage等UI元素... 4 (2)实现点击Play按钮转换场景,点击E ...

  8. Construct 2制作双人射击游戏概要及感悟

    前言 Construct 2是一款图形界面的游戏制作软件.其最大的亮点是用户友好,即不需要掌握编程知识即可轻松制作出生动有趣的小游戏.这里简要介绍如何用Construct 2制作双人射击游戏及制作感悟 ...

  9. 【UE4 第一人称射击游戏】04-血溅效果

    素材资料地址: 链接:https://pan.baidu.com/s/1epyD62jpOZg-o4NjWEjiyg 密码:jlhr 效果: 步骤: 1.将图片素材导入UE4 2.创建一个控件蓝图,命 ...

最新文章

  1. 计算机应用看法,对计算机应用教学方法改革的看法
  2. 运送超级计算机 蓝书368
  3. 【Python】推荐20个好用到爆的Pandas函数方法
  4. html5二次元插件,送你PS一键制作动漫二次元插件,80套背景+50种效果+20款中英字体...
  5. 剑指offer-斐波那契数列
  6. php成品代码,PHP代码
  7. 现代控制会用到python嘛_Python 流程控制
  8. Hadoop本地运行模式了解~
  9. 分布式一致性协议:Raft协议
  10. php mysql切换版本5.7_phpstudy里升级mysql版本到5.7
  11. JVM内存分配与垃圾回收
  12. 大数据为什么需要安全分析
  13. reactinput聚焦事件_React中的事件
  14. 类似京东商城客户端应用源码
  15. EasyExcel自适应列宽(官方文档的不好用,个人修改了下)
  16. php代码生成折现统计图
  17. ARCGIS中如何把线图层和面图层叠加呢?
  18. 百度地图API获取某个行政区
  19. Easier UVM Coding Guidelines / 便捷UVM 编码指南
  20. CF 3B Lorry

热门文章

  1. 正则中文标点符号打包出错
  2. 常用工具(Windows版本)
  3. 【在线字体合集】各大厂商及民间字体合集页面(不定期更新)
  4. python 使用session_Python(Django之Session详解及使用)
  5. shell脚本基础介绍与特使变量
  6. scu仿真机器人足球常用函数
  7. android 利用重力感应监听 来电时翻转手机后静音。
  8. CheckedListBox 当中项的状态改变
  9. iOS如何查看静态库.a文件是否支持i386?
  10. MySQL查询数据案例