上下左右 键控制人移动

出自Unity3D开发一书,

这个脚本式只是简单的控制人物移动,不是很理想,但是可以学习 通过 上 、下、左、右  按键怎么实现任务的移动

[csharp]  view plain copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class MoveByADSW : MonoBehaviour {  
  5.       
  6.     public const int HERO_UP = 0;  
  7.     public const int HERO_RIGHT = 1;  
  8.     public const int HERO_DOWN = 2;  
  9.     public const int HERO_LEFT = 3;  
  10.   
  11.     //人物当前行走的方向状态  
  12.     public int state = 0;  
  13.     //人物移动速度  
  14.     public int moveSpeed = 2;  
  15.       
  16.     //初始化人物位置  
  17.     public void Awake()  
  18.     {  
  19.         state = HERO_UP;  
  20.     }  
  21.     // Use this for initialization  
  22.     void Start () {  
  23.           
  24.     }  
  25.       
  26.     // Update is called once per frame  
  27.     void Update () {  
  28.         //获取控制的方向, 上下左右,   
  29.         float KeyVertical = Input.GetAxis("Vertical");  
  30.         float KeyHorizontal = Input.GetAxis("Horizontal");  
  31.         Debug.Log("keyVertical" + KeyVertical);  
  32.         Debug.Log("keyHorizontal" + KeyHorizontal);  
  33.         if(KeyVertical == -1)  
  34.         {  
  35.             setHeroState(HERO_DOWN);  
  36.         }  
  37.         else if(KeyVertical == 1)  
  38.         {  
  39.             setHeroState(HERO_UP);  
  40.         }  
  41.         if(KeyHorizontal == 1)  
  42.         {  
  43.             setHeroState(HERO_RIGHT);  
  44.         }  
  45.         else if(KeyHorizontal == -1)  
  46.         {  
  47.             setHeroState(HERO_LEFT);  
  48.         }  
  49.           
  50.         if(KeyVertical == 0 && KeyHorizontal == 0)  
  51.         {  
  52.             animation.Play("idle");  
  53.         }  
  54.     }  
  55.       
  56.     void setHeroState(int newState)  
  57.     {  
  58.         //根据当前人物方向与上一次备份的方向计算出模型旋转的角度  
  59.         int rotateValue = (newState - state) * 90;  
  60.         Vector3 transformValue = new Vector3();  
  61.           
  62.         //播放行走动画  
  63.         animation.Play("walk");  
  64.           
  65.         //模型移动的位置数值  
  66.         switch(newState)  
  67.         {  
  68.         case HERO_UP:  
  69.             transformValue = Vector3.forward * Time.deltaTime;  
  70.             break;  
  71.         case HERO_DOWN:  
  72.             transformValue = (-Vector3.forward) * Time.deltaTime;  
  73.             break;  
  74.         case HERO_LEFT:  
  75.             transformValue = Vector3.left * Time.deltaTime;  
  76.             break;  
  77.         case HERO_RIGHT:  
  78.             transformValue = (-Vector3.left) * Time.deltaTime;  
  79.             break;  
  80.         }  
  81.           
  82.         transform.Rotate(Vector3.up, rotateValue);  
  83.         //移动人物  
  84.         transform.Translate(transformValue * moveSpeed, Space.World);  
  85.         state = newState;  
  86.     }  
  87. }  

你可能感兴趣的:(Unity3D)