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;
}
}
}
Unity实现第一人称游戏的控制
最新推荐文章于 2024-02-03 15:02:23 发布