U3D 0822 碰撞体触发

本文深入讲解Unity中的动画系统,包括旧动画系统与新动画系统Animator的使用方法。介绍了如何通过Animation组件播放动画片段,设置动画播放参数,并演示了如何通过脚本控制动画状态的切换,实现流畅的动画过渡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动作系统

模型推荐格式 FBX
Animation组件
面板

  • 旧动画系统组件
    属于新动画系统的子集
    使用帧动画
    Rig标签下选择Legacy
    参数
    • Animation 默认播放的动画片段
      Animations 所有可以播放的动画片段
      Play Automatically 勾选后,游戏开始自动播放
      Animate Physics 是否参与物理运动
      Cull Type 什么时候渲染

      • Allways
        Based On Renderers 摄像机能看到时渲染

    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
      }
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值