使用了枚举来表示状态,方便添加功能,提高代码可读性:
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player1 : MonoBehaviour {
/// <summary>
/// 人物速度
/// </summary>
public float Speed = 5f;
/// <summary>
/// 移动状态枚举
/// </summary>
public enum WalkIdle
{
Standalone,
Up,
Down,
Left,
Right,
LeftUp,
LeftDown,
RightUp,
RightDown
}
void FixedUpdate()
{
// 人物移动
switch (GetWalkIdle())
{
case WalkIdle.Standalone:
break;
case WalkIdle.Up:
transform.Translate(Vector3.up * Time.deltaTime * Speed);
break;
case WalkIdle.Down:
transform.Translate(Vector3.down * Time.deltaTime * Speed);
break;
case WalkIdle.Left:
transform.Translate(Vector3.left * Time.deltaTime * Speed);
break;
case WalkIdle.Right:
transform.Translate(Vector3.right * Time.deltaTime * Speed);
break;
case WalkIdle.LeftUp:
transform.Translate(Vector3.up * Time.deltaTime * Speed * 0.707f);
transform.Translate(Vector3.left * Time.deltaTime * Speed * 0.707f);
break;
case WalkIdle.LeftDown:
transform.Translate(Vector3.down * Time.deltaTime * Speed * 0.707f);
transform.Translate(Vector3.left * Time.deltaTime * Speed * 0.707f);
break;
case WalkIdle.RightUp:
transform.Translate(Vector3.up * Time.deltaTime * Speed * 0.707f);
transform.Translate(Vector3.right * Time.deltaTime * Speed * 0.707f);
break;
case WalkIdle.RightDown:
transform.Translate(Vector3.down * Time.deltaTime * Speed * 0.707f);
transform.Translate(Vector3.right * Time.deltaTime * Speed * 0.707f);
break;
}
}
/// <summary>
/// 获得人物行走状态
/// </summary>
/// <returns></returns>
public WalkIdle GetWalkIdle()
{
if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.A))
{
return WalkIdle.LeftUp;
}
else if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.D))
{
return WalkIdle.RightUp;
}
else if (Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.A))
{
return WalkIdle.LeftDown;
}
else if (Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.D))
{
return WalkIdle.RightDown;
}
else if (Input.GetKey(KeyCode.W))
{
return WalkIdle.Up;
}
else if (Input.GetKey(KeyCode.A))
{
return WalkIdle.Left;
}
else if (Input.GetKey(KeyCode.S))
{
return WalkIdle.Down;
}
else if (Input.GetKey(KeyCode.D))
{
return WalkIdle.Right;
}
return WalkIdle.Standalone;
}
}