赞
踩
由于之前期末了一直在装备考试,随手记已经很久没有写了。今天开始用Unity整一个第一人称射击游戏出来。项目实现参考教程:制作属于你自己的第一款第一人称射击(FPS)游戏
基于CharacterController的第一人称移动功能,了解了一下CharacterController.Move和CharacterController.SimpleMove的区别CharacterController中Move和SimpleMove的区别
重力效果(不拟真)
跳跃效果跳跃受当前运动状态影响
冲刺效果,更快的移动速度
下蹲效果,通过改变CharacterController.Height来实现,拥有独立的下蹲行走速度和下蹲冲刺速度。
我这个写法标准嘛?我也不知道,但是能用了。
冲刺判断时考虑到了移动情况,避免在原地不动时按下冲刺键也能跳到冲刺高度。
要注意将得到的movementDirection的模长设置为1,可以使用normalize。这样做是为了避免在Horizontal和Vertical都有输入时导致的模长大于1位移变大,也就是斜着走时速度变快的情况。注意不能在模长小于0时设置。
我专门做了一个参数来判断是否正在下蹲/站起,正在下蹲/站起时不能再切换状态,这是为了防止协程冲突,暂时没有更好的办法了。
基于CharacterController
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FPCharacterControllerMovement : MonoBehaviour { //-----------------------------------------------------运动-----------------------------------------------------------------// // 走路的速度 public float walkSpeed = 10f; // 奔跑的速度 public float sprintingSpeed = 20f; // 重力 public float grivaty = 9.8f; // 跳跃高度 public float jumpHeight = 2f; // 下蹲之后的高度 public float crouchHeight = 1f; // 站立时的高度 [HideInInspector] public float originHeight; // 下蹲时的冲刺的速度 public float crouchWalkSpeed = 5f; public float crouchSprintSpeed = 5f; // 当前在冲刺 [HideInInspector] public bool m_isSprinting; // 当前是否蹲下了 [HideInInspector] public bool m_isCrouched; // 当前是否正在蹲下/起立 用于协程控制 [HideInInspector] public bool m_isDoCrouching; // 对CharacterController的引用 private CharacterController m_characterController; // 对Transform的引用 private Transform m_characterTransform; // 移动的方向 private Vector3 m_movementDirection; // 当前使用哪个速度(Walk or Sprint) private float
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。