动作系统
模型推荐格式 FBX
Animation组件
面板
- 旧动画系统组件
属于新动画系统的子集
使用帧动画
Rig标签下选择Legacy
参数
- Animation 默认播放的动画片段
Animations 所有可以播放的动画片段
Play Automatically 勾选后,游戏开始自动播放
Animate Physics 是否参与物理运动
Cull Type 什么时候渲染
Allways
Based On Renderers 摄像机能看到时渲染
- Animation 默认播放的动画片段
Animation m_pAni;
m_fAni.CrossFade("Walk");动画过度,避免卡顿现象
方法
bool Play("动画片段的名称");
bool Play("动画片段的名称",PlayMode.StopAll);
bool CrossFade("动画片段的名称",int fadeLenth );百分比融合 ,从后面算
bool CrossFadeQueued("动画片段的名称",int fadeLength,QueueMode);
AnimationState this(string name);
PlayMode 枚举
StopAll
StopSameLayer
QueueMode
CompleteOthers
PlayNo
StopAll
StopSameLayer
AnimationState
- name 动画片段
clip 动画片段
length 动画片段长度
speed 动画片段播放的速度 >1加速播放 0~1减速播放
Animator 新动画组件
在模型面板中 修改缩放
根节点
using UnityEngine;
using System.Collections;
public class playanimation : MonoBehaviour {
Animation m_pAni;
ENUM_MOUSTER_STATE m_emState= ENUM_MOUSTER_STATE.stand ;
CharacterController m_pController;
private float m_pVectical;
private float m_pHorizontal;
public float m_pMoveSpeed =30.0f;
public float m_pRotSpeed = 2f;
void Awake(){
m_pAni = GetComponent<Animation> ();
m_pController = GetComponent<CharacterController> ();
}
// Use this for initialization
void Start () {
m_pAni.Play (ENUM_MOUSTER_STATE.stand.ToString ());
}
// Update is called once per frame
void Update () {
m_pVectical = Input.GetAxis ("Vertical");
m_pHorizontal = Input.GetAxis ("Horizontal");
if (m_pVectical > 0) {
m_pController.SimpleMove(transform.forward*m_pMoveSpeed*Time.deltaTime);
ChangeStateTo(ENUM_MOUSTER_STATE.walk);
}
transform.Rotate (0, m_pHorizontal * Time.time * m_pRotSpeed,0);
if (Input.GetKeyDown (KeyCode.Space)) {
ChangeStateTo(ENUM_MOUSTER_STATE.atk1);
}
if (Input.GetKeyDown (KeyCode.Alpha0)) {
ChangeStateTo(ENUM_MOUSTER_STATE.death);
}
if (Input.GetKeyDown (KeyCode.Alpha3)) {
ChangeStateTo(ENUM_MOUSTER_STATE.run);
}
if (!m_pAni.isPlaying) {
ChangeStateTo(ENUM_MOUSTER_STATE.stand);
}
}
void ChangeStateTo(ENUM_MOUSTER_STATE emState){
Debug.Log(m_emState.ToString());
if (emState == m_emState) {
Debug.Log(m_emState.ToString());
if (m_emState == ENUM_MOUSTER_STATE.atk1){
Debug.Log(m_emState.ToString());
m_pAni.CrossFadeQueued ("atk2", 03f, QueueMode.CompleteOthers);
m_emState =ENUM_MOUSTER_STATE.atk2;
Debug.Log(m_emState.ToString());
}
return;
}
if (!m_pAni.IsPlaying(emState.ToString())) {
Debug.Log(m_emState.ToString());
m_pAni.CrossFade(emState.ToString(),0.3f,PlayMode.StopSameLayer);
m_emState= emState;
Debug.Log(m_emState.ToString());
}
}
}
public enum ENUM_MOUSTER_STATE{
walk,
run,
aida,
stand,
atk1,
atk2,
fly,
getup,
death
}
地扎
using UnityEngine;
using System.Collections;
public class crush : MonoBehaviour {
Animation m_pAnimation;
ENUM_UPorDown m_pState;
void Awake(){
m_pAnimation = GetComponent<Animation> ();
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(){
m_pAnimation.Play (ENUM_UPorDown.Up.ToString());
}
void OnTriggerExit(){
m_pAnimation.Play (ENUM_UPorDown.Down.ToString());
}
}
public enum ENUM_UPorDown{
Up,
Down
}