可视化数学

资料下载:Unity基础系列(二)——构建一个视图(可视化数学).pdf
范例下载:Build a mathematical view.unitypackage

知识总结
预制体(Prefabs )是一种方便的游戏对象配置方法。如果你更改了预置体资源,那么它在任何场景中的所有实例都会以相同的方式进行变更(想一想初中学的Flash中的元件和实例关系)。例如,更改预制体的Scale会改变仍然在场景中的立方体的Scale。但是要注意,每个实例只会使用自己的位置和旋转。预制体不会统一修改场景示例对象的位置和旋转

②是否可以在循环里面定义point?
可以。虽然代码会重复,但我们只定义了一次变量。循环的每一次迭代都会重用它,就像我们之前手动做的那样。当然其实还可以在循环之前定义point。这也允许你在循环之外使用变量。否则,其作用域仅限于while循环的块

③ i=i+1 之前必须先明确地将零赋值给i,直接在定义的时候赋值即可

虽然所有的立方体都有相同的缩放了,但我们在循环的每一次迭代中都计算了它,这并没有必要。相反,我们可以在循环之前计算一次,将其存储在Vector 3变量中,并在循环中使用。
温馨提示:如果迭代中有常量被计算多次不妨给它优化成单一变量

⑤[Range(10, 100)]是否意味着这个值只能以10-100范围为限?
不是的。它所做的只是在Unity面板上使用滑块可以得到的范围。你可以自己写代码来修改它,让它变为任何其他的值。

⑥可以直接对 Point.localPosition.y 进行赋值吗?
不可以。如果localPosition是一个字段值的话,可以直接设置其点的位置。但是,localPosition是一个属性。它只能把向量传递给我们或者我们传递向量给它。最终调整的是一个局部向量值,而不是一个点位置。

⑦深入探究不能复制 localPosition.x/y/z 的原因
⒈让我们使用F12导航到transform里,可以看到position是Vector3类型
QQ截图20200826215516_.png
⒉而Vector3里的x/y/z并没有访问限制
QQ截图20200826215558.png
⒊那么究竟是为什么无法对transform.position.x/y/z赋值呢?

原因就在于Vector3是一个结构体(值类型),而position是一个自动实现的属性。
结构体是值类型的,值类型在通过方法传递的时候,所传递的只是值的副本。
C#中的属性可以说是两个分别名为get和set的方法
而当我们写出形如 transform.position.x = 1 这样的代码时,是在通过get方法得到position
然后修改position的x字段的值。由于position是结构体类型的,get得到的也只是position的一个副本
而对这个副本所作出的任何修改,都对原positon没有任何影响,因此这样的修改是毫无意义的。

⑧Position与localPosition的区别

position是世界坐标中的位置,是绝对坐标
localPosition是相对于父对象的位置,是相对坐标(Inspector中Transform显示的是相对坐标)
如果对象是一级对象,position和localPosition是相同的

⑨最终效果:
r4xbu5ZZ8b.gif

标签: CatLikeCoding, 温馨提示, localPosition, Position

仅有一条评论

  1. 123 123

    ¿¿¿

添加新评论