我是靠谱客的博主 健康大米,这篇文章主要介绍Unity——Animaor动画系统,现在分享给大家,希望可以做个参考。

1.新建Animator Contrator文件

        

         AnyState:任意状态,常用于播放死亡状态,不管当前角色在播放什么状态,都可以被杀死然后播放死亡动作

        

         

         Entry/Exit:进入状态机和退出状态机,进入状态机默认连接默认状态动画

        这个选项更换默认动作

        New State:默认状态,可以修改名字

         New State 0:一般状态,可以修改名字

        

 该方法增加状态

Layers层,相当于是平行的效果,不会互相影响

 Paramters:状态切换参数(int float bool trigger)

         Solo:动画切换优先

        Mute:动画切换禁止

        Setting:

                ExitTime:动作切换上一动作的退出时间

                Fixed Duration/Transtion:动作切换时间长度

                Transtion offset:下一动作所在上一动作比列

                Interruption sources:打断动画切换来源

        Conditions:这里面的切换动作参数是paramers里面定义的,条件可以大于,等于,不等于,小于

        

Animator组件

         Controller:AnimatorController文件

        Avatar:存放骨骼文件的地方

        Apply Root motion:如果勾选代表使用动画中的位移;如果当前游戏物体上的代码组件中有OnAnimatorMove内置函数,位移就受代码控制

        Updata Mode:        

                Normal:正常更新

                Animate Physics:物理更新(FixUpdate更新)

                Unscaled Time:不受时间缩放影响

        Culling Mpde:

                Always Animate:始终有动画

                Cull Update Transform:当摄像机没有渲染该物体的时候,就会停止部分Transform相关功能

                Cull Completely:当摄像机没有渲染该物体,整个动画都不会被渲染

     

npc自动寻路+攻击

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class Animatortest : MonoBehaviour { class SkillDate { public bool cd; public float attackDis; } private Animator myAnimator; private float h, v; private NavMeshAgent myNavMesh; private GameObject target; private SkillDate mySkillData; // Start is called before the first frame update void Start() { myAnimator = this.gameObject.GetComponent<Animator>(); myNavMesh = this.gameObject.GetComponent<NavMeshAgent>(); mySkillData = new SkillDate(); mySkillData.attackDis = 5; mySkillData.cd = false; } // Update is called once per frame void Update() { //v = Input.GetAxis("Vertical"); //if (v != 0) //{ // myAnimator.SetBool("Move", true); // transform.Translate(Vector3.forward * v *0.02f); //} //如果target为空就去寻找要寻路的目标 if (!target) { target = FindEnum(); Debug.Log(target); } //如果获取到了目标,就要开始进行尝试攻击或者自动寻路 if (target) { //定义一个是否在移动的标志 bool moveToTarget = false; //这个函数返回的是moveToTarget TryAttack(out moveToTarget); if (moveToTarget) { //移动到目标位置 myNavMesh.SetDestination(target.transform.position); //播放移动动画 MoveAnimator(); } } } /// <summary> /// 播放移动动画 /// </summary> void MoveAnimator() { myAnimator.SetBool("Move", true); } /// <summary> /// 检测周围有没有需要攻击的物体 /// </summary> /// <returns></returns> GameObject FindEnum() { //返回半径100圆心是本物体,且图层为NPC的物体 Collider[] colliders = Physics.OverlapSphere(transform.position, 100, 1<<LayerMask.NameToLayer("NPC")); if(colliders.Length > 0) { return colliders[0].gameObject; } return null; } /// <summary> /// 尝试进行攻击 /// </summary> /// <param name="moveToTarget"></param> void TryAttack(out bool moveToTarget) { moveToTarget = false; if (!mySkillData.cd) { if (Vector3.Distance(transform.position, target.transform.position) > mySkillData.attackDis) { //不在攻击范围内,需要移动至攻击目标 moveToTarget = true; return; } else { PrepareAttack(); } //进行攻击 AnimatorStateInfo info = myAnimator.GetCurrentAnimatorStateInfo(0); if (info.IsName("Base Layer.idle")) { myAnimator.SetInteger("SkillId", 1012); } } } /// <summary> /// 准备攻击 /// </summary> void PrepareAttack() { //1.面朝向攻击目标 Vector3 pos = new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z); Vector3 dir = pos - transform.position; transform.rotation = Quaternion.LookRotation(dir); //2.让自身停止移动 myNavMesh.SetDestination(transform.position); //停止播放移动动画 myAnimator.SetBool("Move", false); } }

最后

以上就是健康大米最近收集整理的关于Unity——Animaor动画系统的全部内容,更多相关Unity——Animaor动画系统内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部