• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

unity3d中上下左右键控制挪动

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/1026/688.html

 
using UnityEngine;  
using System.Collections;  
public class MoveByADSW : MonoBehaviour {  
      //人物状态
    public const int HERO_UP = 0;  
    public const int HERO_RIGHT = 1;  
    public const int HERO_DOWN = 2;  
    public const int HERO_LEFT = 3;  
    //人物当前行走的方向状态  
    public int state = 0;  
    //人物挪动速度  
    public int moveSpeed = 2;  
    //初始化常州软件技术培训人物位置  
    public void Awake()  
    {  
        state = HERO_UP;  
    }  
    // Use this for initialization  
    void Start () {  
    }  
    // Update is called once per frame  
    void Update () {  
        //获取控制的方向, 上下左右,   
        float KeyVertical = Input.GetAxis("Vertical");  
        float KeyHorizontal = Input.GetAxis("Horizontal");  
        Debug.Log("keyVertical" + KeyVertical);  
        Debug.Log("keyHorizontal" + KeyHorizontal);  
        if(KeyVertical == -1)  
        {  
            setHeroState(HERO_DOWN); //下 
        }  
        else if(KeyVertical == 1)  
        {  
            setHeroState(HERO_UP);  //上
        }  
        if(KeyHorizontal == 1)  
        {  
            setHeroState(HERO_RIGHT); //右 
        }  
        else if(KeyHorizontal == -1)  
        {  
            setHeroState(HERO_LEFT);  //左
        }  
        if(KeyVertical == 0 && KeyHorizontal == 0)  
        {  
            animation.Play("idle");  
        }  
    }  
    void setHeroState(int newState)  
    {  
        //依据常州平台运营当前人物方向与上一次备份的方向计算出模型旋转的角度  
        int rotateValue = (newState - state) * 90;  
        Vector3 transformValue = new Vector3();  
        //播放行走动画  
        animation.Play("walk");  
        //模型挪动的位置数值  
        switch(newState)  
        {  
        case HERO_UP:  
            transformValue = Vector3.forward * Time.deltaTime;  
            break;  
        case HERO_DOWN:  
            transformValue = (-Vector3.forward) * Time.deltaTime;  
            break;  
        case HERO_LEFT:  
            transformValue = Vector3.left * Time.deltaTime;  
            break;  
        case HERO_RIGHT:  
            transformValue = (-Vector3.left) * Time.deltaTime;  
            break;  
        }  
        transform.Rotate(Vector3.up, rotateValue);  
        //挪动人物  
        transform.Translate(transformValue * moveSpeed, Space.World);  
        state = newState;  
    }  
}  
 

上篇:上一篇:Unity根底包 FirstPersonController下的MouseLook 脚本研讨
下篇:下一篇:u33d给程序添加运用日期