Has Exit Time 当前动画是否有退出时间
Exit Time 退出的时间点 0-1,1表示播放完
Transition Durations 两个动画的过度时间(协调用)
Conditions 使用到的变量用来控制过度是否触发
要使用Transform组件来设置父物体,子物体就会跑到父物体下
transform.SetParent(who.transform); transform.SetParent(who.transform,false);
忽略第二个参数是,子物体会保持世界坐标的位置,自动计算本地坐标
指定第二个参数为false时,不会保持在原来世界坐标的位置。
首先选择连续的动画图片,直接拖拽到Scene或Hierarchy中,Unity会生成一个AnimatorController和一个Animation,形成的物体对象有一个组件Animator引用的就是这个生成的AnimatorController,这个AnimatorController里面包含默认动画为生成的Animation。如果该物体对象有多个动画的话,再选择多个这个动画的图片,拖拽到刚刚第一次拖拽的物体上,此时就只会生成一个Animation,直接显示在上次创建的AnimatorController中,使用同一个AnimatorController。
Mesh Filter组件存储一个Mesh,描述模型的网格(形状),拥有三角面的顶点信息。
Mesh Renderer组件通过Mesh获取信息,通过Material渲染模型的样子,并赋给颜色。
this.gameObject.GetComponent<MeshRenderer> ().material.color = Color.red;
先获取到Mesh Renderer组件
再获取到material材质
改变材质的属性color
其实是复制材质,改变材质,再赋值给renderer,抛弃原来的材质实例
一、对象池物体
using UnityEngine; public class PooledObject:MonoBehaviour{ pulbic ObjectPool Pool{get;set;} public void ReturnToPool(){ if(Pool){ Pool.AddObject(this); }else{ Destory(gameObject); } } }
如果不存在对象池,就销毁
要使用对象池管理时,就让物体继承PooledObject
二、对象池
public class ObjectPool:MonoBehaviour{ PooledObject prefab; List<PooledObject> availableObjects = new List<PooledObject>(); public PooledObject GetObject(){ PooledObject obj; int lastAvailableIndex = availableObjects.Count-1; if(lastAvailableIndex >= 0){ obj = availableObjects[lastAvailableIndex]; availableObjects.RemoveAt(lastAvailableIndex); obj.gameObject.SetActive(true); }else{ obj = Instantiate<PooledObject>(prefab); obj.transform.SetParent(transform,false); obj.Pool = this; } return obj; } public void AddObject(PooledObject obj){ obj.gameObject.SetActive(false); availableObjects.Add(obj); } }
transform.GetComponentsInChildren<type>();//获取自己和子物体所有type类型的组件
Rigidbody的velocity会提供给刚体一个速度,带方向
angularVelocity 角速度
在私有变量前加特性[SerializeField],可以在编辑器中拖拽赋值
[SerializeField] private int Hp;
因为Time.deltaTime受到时间缩放因子的影响,所以使用Time.unscaleDeltaTime
FPS = (int)(1f/Time.unscaleDeltaTime);