您的位置:首页 > 移动开发 > Unity3D

简单的Animation实现角色行走(学习笔记)

2016-01-07 11:45 435 查看
这篇文章主要一篇学习雨凇博客的学习笔记。

1.工程模型

首先从博主的主页下载unity项目工程,unity3D_12.unitypackage。这个工程包一定要放到全英文路径之下才能导入,导入的过程就是新建一个unity工程,然后Asset->Import Package->Custom Package,选择下载的包即可。



Asset目录下有一个male文件夹,其中有一个叫Male的资源,这个是美术做好的,将其拖入到场景,同时场景中还需要一个plane平面。Inspect视图中已经包含了各种动画内容。下面来解释下参数:

  Animation :  这个是是设置默认动画的,角色停在原地,如果勾选Play Automatically选项,就可以播放默认动画。

 Animations

size  该模型动画数量

        Element0,Element1.....这个是各个动画的列表,可以吧动画拖进去

Play Automatically 是否自动播放

Animation Physics  是否设置模型物理碰撞

2.脚本

控制模型走动方向可以通过遥感,也可以通过键盘。

using UnityEngine;
using System.Collections;

public class Controller : 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 backState = 0;

public MPJoystick moveJoystick;
public void Awake() {

}

void Start () {
state = HERO_DOWN;
}

void Update () {

#if UNITY_EDITOR
if(Input.GetKey(KeyCode.UpArrow))
{
setHeroState(HERO_UP);
}
else if(Input.GetKey(KeyCode.DownArrow))
{
setHeroState(HERO_DOWN);
}
else if(Input.GetKey(KeyCode.LeftArrow))
{
setHeroState(HERO_LEFT);
}
else if (Input.GetKey(KeyCode.RightArrow))
{
setHeroState(HERO_RIGHT);
}
else
{
animation.Play();
}
#else
float touchKey_x = moveJoystick.position.x;
float touchKey_y = moveJoystick.position.y;

if(touchKey_x == -1){
setHeroState(HERO_LEFT);

}else if(touchKey_x == 1){
setHeroState(HERO_RIGHT);

}

if(touchKey_y == -1){
setHeroState(HERO_DOWN);

}else if(touchKey_y == 1){
setHeroState(HERO_UP);
}

if(touchKey_x == 0 && touchKey_y ==0){
animation.Play();
}
#endif

}

public 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, Space.World);

backState = state;
state = newState;

}

}


遥感之前介绍过了,这个就不再啰嗦了,这里为了方便调试,增加了键盘控制。

参考博客:http://www.xuanyusong.com/archives/532
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d