读一读

Unity的Coroutines实际创建一个iterator,当通过StartCoroutine方法开启协程时,它会储存下来,一直请求下一项每一帧直到完成。yield用来区分item,在你实际要做的事情和迭代器要做之间


GameObject默认的Pivot一般为中心点,So要把两个子父体对象的正方体GameObject粘在一起,则子正方体相对父正方体要移动(父边长+子边长)/2


transform.parent = parent.transform;

new GameObject("Fractal Child").AddComponent<Fractal>().Initialize(this);

①先new GameObject

②Fractal组件并联系到GameObject

③Awake和OnEnable方法被触发

④增加Fractal组件完成

⑤调用Initialize()方法

⑥到下一帧,执行Start()方法


MeshFiter filter = gameObject.AddComponent<MeshFilter>();
filter.mesh = mesh;

AddCompont<>()为GameObject添加一个由<>泛型声明类型的组件,并返回这个组件的引用,可以直接修改它的值


该函数在组件激活的时候调用,在第一次Update之前,只调用一次


材质包含了Shader和Shader所需的数据,Shader告诉图形显卡怎么绘制物体的顶点们


hours.localRotation = Quaternion.Euler(0f,0f,time.Hour*(-hoursToDegrees));//欧拉角转换成四元数

struct结构体是值类型

property属性是一个方法类型的变量,可控制为可读或可写的


private void Update(){}

这个方法是组件中每帧都执行的方法

Update方法无论声明为公有还是私有,内置方法也一样,Unity都可以找到它并且调用它,所以我们不应该声明Update为公有,因为我们并不打算自己去调用它,为了减少潜在的BUG,应该声明为private