简单的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
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
相关文章推荐
- Kinect结合Unity3D引擎开发体感游戏(一)
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D动态对象优化代码分享
- Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
- Unity3d获取系统时间
- unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)
- Unity3D游戏引擎实现在Android中打开WebView的实例
- unity3d调用手机或电脑摄像头
- Unity3d发布IOS9应用时出现中文乱码的解决方法
- 分享一个开源的网络游戏服务器架构—HouHai
- Unity3D插件详细评测及教学下载
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- Unity3D上路_03-塔防游戏
- Unity3D上路_04-基础资源介绍
- Unity3D上路_05-网络相关