一个简简单单的基于CharacterController的第一人称射击FPS角色控制器的实现——Unity随手记(2021.1.19)

由于之前期末了一直在装备考试,随手记已经很久没有写了。今天开始用Unity整一个第一人称射击游戏出来。项目实现参考教程:制作属于你自己的第一款第一人称射击(FPS)游戏


今天实现的内容:

  • 基于CharacterController的第一人称移动功能,了解了一下CharacterController.Move和CharacterController.SimpleMove的区别CharacterController中Move和SimpleMove的区别

  • 重力效果(不拟真)

  • 跳跃效果跳跃受当前运动状态影响

  • 冲刺效果,更快的移动速度

  • 下蹲效果,通过改变CharacterController.Height来实现,拥有独立的下蹲行走速度和下蹲冲刺速度。


BUG以及缺陷:

我这个写法标准嘛?我也不知道,但是能用了。


值得注意的:

冲刺判断时考虑到了移动情况,避免在原地不动时按下冲刺键也能跳到冲刺高度。

要注意将得到的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
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值