using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
float speed = 5.5f;
int hp;
private int State = 2;//角色状态
private int UP = 0;//角色状态向前
private int LEFT = 1;//角色状态向左
private int DOWN = 2;//角色状态向后
private int RIGHT = 3;//角色状态向右
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Move();
}
//移动
void Move()
{
if (Input.GetKey(KeyCode.W))
{
setState(UP);
}
if (Input.GetKey(KeyCode.A))
{
setState(LEFT);
}
if (Input.GetKey(KeyCode.S))
{
setState(DOWN);
}
if (Input.GetKey(KeyCode.D))
{
setState(RIGHT);
}
}
void setState(int currState)
{
Vector3 transformValue = new Vector3();//定义平移向量
float rotateValue = (currState - State) * 90;
switch (currState)
{
case 0://角色状态向前时,角色不断向前缓慢移动
transformValue = Vector3.forward * Time.deltaTime * speed;
break;
case 1://角色状态向左时,角色不断向左缓慢移动
transformValue = Vector3.left * Time.deltaTime * speed;
break;
case 2://角色状态向后时。角色不断向后缓慢移动
transformValue = Vector3.back * Time.deltaTime * speed;
break;
case 3://角色状态向右时。角色不断向右缓慢移动
transformValue = Vector3.right * Time.deltaTime * speed;
break;
default : break;
}
gameObject.transform.Rotate(Vector3.down, rotateValue);//旋转角色
gameObject.transform.Translate(transformValue, Space.World);//平移角色
State = currState;//赋值,方便下一次计算
}
}
思路:首先要有个变量去记录下操作前的一个方向状态。(本次操作的对象是正面对着屏幕的。)然后还有有个变量去描述将要发生的方向。接着要明确,前和后,左和右是横跨180°的,其他的两两是相差90°的。所以我们可以以90°一个单位去做旋转。并且利用前面总结的方向之间的关系来去设定前后左右的数值变量的差值。这样我们就能利用float rotateValue = (currState - State) * 90来求出转角值。之后再去移动即可。记住,每次改变完操作后要把当前状态进行更新。文章来源地址https://www.toymoban.com/news/detail-629482.html
文章来源:https://www.toymoban.com/news/detail-629482.html
到了这里,关于Unity实现人物旋转+移动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!