【游戏开发】[用代码创建unity5.X的动画状态机]
来源:互联网 发布:类似迅雷的软件 编辑:程序博客网 时间:2024/05/21 08:57
不废话 上代码
可能有的人 会质疑 这不是editor的功能吗
是的 但是这个允许在运行时候使用 你们跟一下代码看看继承于哪里就知道了
using UnityEngine;using System.Collections;using System.Collections.Generic;using UnityEditor;using UnityEditor.Animations;using System.IO;public class test: MonoBehaviour{ // Use this for initialization void Start() { CreateAnimationcontroller(); } private void CreateAnimationcontroller() { AnimatorController controller = AnimatorController.CreateAnimatorControllerAtPath("Assets/animation.controller");//here is input path AnimatorControllerLayer layer = controller.layers[0]; // layer AnimatorStateMachine machine = layer.stateMachine; //取到baselayer下的状态机(PS 英语不够用了) CreatTransline("Assets/_SandBox/anime_xiaoguai_02_daiji.FBX", layer);<span style="white-space:pre"></span>//creat the animationcontroller this.AddCondition(controller); //添加转换条件 } private static void CreatTransline(string path, AnimatorControllerLayer layer) { AnimatorStateMachine machine = layer.stateMachine; //获取到当前状下的状态机 AnimationClip newClip = AssetDatabase.LoadAssetAtPath(path, typeof(AnimationClip)) as AnimationClip;//加载动画剪辑 AnimatorState state = machine.AddState("first"); //可以以动画名字 创建状态 AnimatorState one = machine.AddState("one"); state.motion = newClip; //状态的动画 赋值为上面的动画剪辑 one.motion = newClip; state.AddTransition(one); //添加一个状态转移线(PS 这是第一个添加的状态 也就会被系统设为默认状态 有可能有很多状态转移线 //记住添加状态的顺序 或者用列表按顺序存起链接过的状态 方便知道 状态线的另一端是什么状态 以便调试) one.AddTransition(state); one.transitions[0].hasExitTime = false; //transitions[0]当前状态线的列表 原理同上 这里设置是否有结束时间 默认有 我们设置没有 one.transitions[0].AddCondition(AnimatorConditionMode.IfNot,0,"isrun"); //添加状态 3个参数 第一个 文档里说的是版本 其实是触发状态(如果状态是参数1即触发转换) // 第二个 阀值(ps 不知道干啥的) // 第三个 条件的名字 要和刚才做好的一样 //one.transitions[1].hasExitTime = true; // AnimatorStateTransition trans = machine.AddAnyStateTransition(state); } private void AddCondition(AnimatorController control) { control.AddParameter("isrun", AnimatorControllerParameterType.Bool); //建立一个状态 名字 类型 // controller.AddParameter("one->first", AnimatorControllerParameterType.Trigger); } // Update is called once per frame}
</pre><pre name="code" class="csharp">
</pre><pre name="code" class="csharp">2016.7.28 更新
不少朋友反映 看着吃力 建议大家 手动做一次状态机 然后对照代码 就能理解的很快了
</pre><pre name="code" class="csharp">
2016.10.19更新
我们做这个工能是为了动态创建出状态机并赋值给相应的模型,目的是达到一种 纯代码做出游戏的效果(吹个牛逼)
2 0
- 【游戏开发】[用代码创建unity5.X的动画状态机]
- unity5之代码创建状态机,玩的666
- unity5之代码创建状态机,玩的666
- [cocos2d-x 2.0+游戏开发]动画的创建
- Unity5.x入门游戏
- 用代码动态创建状态机
- Cocos2d-x 3.x游戏开发之旅---<状态机>
- 基于silverlight GDE-X开发进展 - 游戏引擎状态机
- 基于silverlight GDE-X开发进展 - 游戏引擎状态机
- quick-cocos2d-x游戏开发【14】——StateMachine状态机
- quick-cocos2d-x游戏开发——StateMachine状态机
- quick-cocos2d-x游戏开发【14】——StateMachine状态机
- quick-cocos2d-x游戏开发——StateMachine状态机
- quick-cocos2d-x游戏开发——StateMachine状态机
- Unity5.x制作FPS游戏
- Unity5.x制作RPG游戏
- Unity5.x 动画Animator使用IK动画
- Unity5.x制作合金弹头(二)-主角的创建
- 比特率 波特率 数据传输速率 区别
- 前端模块化开发的价值
- Java类成员的初始化顺序
- C语言二叉树创建、遍历、深度、叶子节点
- 为什么越没本事的人, 自尊心越强?
- 【游戏开发】[用代码创建unity5.X的动画状态机]
- 常用js自定义函数
- Android系统服务(一)
- 199. Binary Tree Right Side View
- C#MySQL 链接
- 安卓实战之如何快速搭建app架构
- 实现定位获得信息
- 如果有人问你,GET和POST,有什么区别?你会如何回答?
- Android中多点触摸协议