欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity3D实现人物转向与移动

程序员文章站 2022-05-14 22:12:59
在网上有非常多通过射线方式实现的人物行走控制脚本,可是假设仅仅是想通过键盘按键来控制的话。比方进行第三人称视角控制,事实上仅仅须要进行简单的角度变换就可以。思路例如以下: 1、依照顺...

在网上有非常多通过射线方式实现的人物行走控制脚本,可是假设仅仅是想通过键盘按键来控制的话。比方进行第三人称视角控制,事实上仅仅须要进行简单的角度变换就可以。思路例如以下:

1、依照顺时针方向设定前、右、后、左分别为0,1,2,3。

2、设定状态初值0,即朝向前方。

3、通过当前方向值减去前一次方向值,乘以90°即为转向角,然后进行旋转变换就可以。

using unityengine;
using system.collections;
using system.linq;
public class move: monobehaviour
{
 private int state;//角色状态
 private int oldstate=0;//前一次角色的状态
 private int up = 0;//角色状态向前
 private int right =1;//角色状态向右
 private int down = 2;//角色状态向后
 private int left = 3;//角色状态向左
 
 public float speed=8;
 
 void start()
 {
 }
 void update()
 {
 if (input.getkey("w"))
 {
  setstate(up);
 }
 else if (input.getkey("s"))
 {
  setstate(down);
 }
 
 if (input.getkey("a"))
 {
  setstate(left);
 }
 else if (input.getkey("d"))
 {
  setstate(right);
 }
 
 }
 
 
 void setstate(int currstate)
 {
 vector3 transformvalue = new vector3();//定义平移向量
 int rotatevalue = (currstate - state) * 90;
 transform.animation.play("walk");//播放角色行走动画
 switch (currstate)
 {
 case 0://角色状态向前时,角色不断向前缓慢移动
  transformvalue = vector3.forward * time.deltatime * speed;
  break;
 case 1://角色状态向右时。角色不断向右缓慢移动
  transformvalue = vector3.right * time.deltatime * speed;
  break;
 case 2://角色状态向后时。角色不断向后缓慢移动
  transformvalue = vector3.back * time.deltatime * speed;
  break;
 case 3://角色状态向左时,角色不断向左缓慢移动
  transformvalue = vector3.left * time.deltatime * speed;
  break;
 }
 transform.rotate(vector3.up, rotatevalue);//旋转角色
 transform.translate(transformvalue, space.world);//平移角色
 oldstate = state;//赋值,方便下一次计算
 state = currstate;//赋值,方便下一次计算
 }
 
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。