Unity实现第一人称游戏的控制

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    #region 数据
    private float MouseX;//人物X轴
    private float MouseY;//人物Y轴
    public float MinAngel;//最啸X轴旋转角度
    public float MaxAngel;//最大X轴旋转角度
    /// <summary>
    /// 是否跳跃
    /// </summary>
    private bool istakeoff;//是否跳跃

    /// <summary>
    /// 是否结束跳跃
    /// </summary>
    private bool isreturnjump = true;//是否结束跳跃
    /// <summary>
    /// 下落速度
    /// </summary>
    private float downspeed;
    /// <summary>
    /// 跳跃速度
    /// </summary>
    private float jumpspeed;
    private bool isMoveRun;//是跑还是走?(切换跑和走还没做)
    public float MoveSpeed;//移动速度
    public float RunSpeed;
    #endregion

    #region 组件

    public GameObject camera;
    private CharacterController character;
    private CollisionFlags flags;
    #endregion

    void Start()
    {
        character = GetComponent<CharacterController>();
    }
    void Update()
    {
        Rotate();
        Move();
        Jump();
        JumpOrDrop();
    }
    /// <summary>
    /// 旋转身体
    /// </summary>
    private void Rotate()
    {
        MouseY += Input.GetAxis("Mouse Y");
        MouseX += Input.GetAxis("Mouse X");
        MouseX = Mathf.Clamp(MouseX, MinAngel, MaxAngel);
        this.transform.localEulerAngles = new Vector3(0, MouseY, 0);
        camera.transform.localEulerAngles = new Vector3(MouseX, 0, 0);
    }
    /// <summary>
    /// 跳跃
    /// </summary>
    private void Move()
    {
        if (Input.GetAxisRaw("Run") == 1)
        {
            isMoveRun = true;
        }
        else
        {
            isMoveRun = false;
        }
        Vector3 mented = this.transform.TransformDirection(new Vector3(Input.GetAxisRaw("Horizontal") * 0.025f, 0, Input.GetAxisRaw("Vertical") * 0.025f));
        character.Move(mented);
    }
    /// <summary>
    /// 下落
    /// </summary>
    private void Drop()
    {
        downspeed += Time.deltaTime*0.1F;
        if (downspeed > 0.09f)
        {
            downspeed = 0.09f;
        }
        Vector3 Mented = this.transform.TransformDirection(0, -downspeed, 0);
        flags=character.Move(Mented);
    }
    /// <summary>
    /// 跳跃
    /// </summary>a
    private void Jump()
    {
        if (Input.GetAxis("Jump") > 0 && isreturnjump)//当按下空格键并且完成跳跃为true
        {
            Debug.LogWarning(1111);
            istakeoff = true;//开始跳跃
            isreturnjump = false;//没有完成跳跃
        }
        if (!isreturnjump && istakeoff)//没有结束跳跃并且正在跳跃状态
        {
            jumpspeed += Time.deltaTime * 0.5F;
            if (jumpspeed > 0.05F)
            {
                jumpspeed = 0.05F;
            }
            Vector3 movennt = this.transform.TransformDirection(0, jumpspeed, 0);
            character.Move(movennt);
            StartCoroutine("JumpTo");
        }
    }
    IEnumerator JumpTo()//跳跃0.4秒后,关闭跳跃状态,跳跃速度为0,开始下落
    {
        yield return new WaitForSeconds(0.4f);
        istakeoff = false;
        jumpspeed = 0.02F;
    }
    /// <summary>
    /// 下落中OR可以跳
    /// </summary>
    private void JumpOrDrop()
    {
        if (!character.isGrounded && !istakeoff)//完成跳跃后下落
        {
            Drop();
        }
        if (!istakeoff && ((CollisionFlags.Below & flags) != 0))//没有完成跳跃并且已经跳跃
        {
            isreturnjump = true;
            downspeed = 0f;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值