读一读

this.gameObject.GetComponent<MeshRenderer> ().material.color = Color.red;
  1. 先获取到Mesh Renderer组件

  2. 再获取到material材质

  3. 改变材质的属性color

  4. 其实是复制材质,改变材质,再赋值给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相等