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);
在简单的场景中,帧率很高超过100是没有必要的,设置Application.targetFrameRate属性来调整最大帧率,设置-1为不限制
FixedUpdate不受帧率的影响
打开Edit/Project Settings/Time
调整Fixed Timestep来决定几秒执行一次FixedUpdate
这个要权衡Update,提高FixedUpdate,则降低Update的帧率
Color.Lerp(Color.white,Color.yellow,t);
计算结果:(b-a)*t+a,t[0,1]
Math.Lerp可以是向量,颜色,float等
Random.Range(0.1f,0.5f);
Random是工具类,提供很多随机数的方法,Range是一个重载方法。根据参数类型返回相应类型的随机数。
随机数包前不包后,除非min和max相等