关于Transform.localXXX的运用
transform.localXXXX一般都是 相对于父对象的XXX,针对这点可以利用的情况很多。
就比如这次的课堂作业 太阳,地球,月亮的模型:
太阳是地球的父对象
而地球是月亮的父对象
一开始我设置三者的位置时,只用了position,代码如下:
float SunR = 8f;
float EarR = 9f;
Earth.transform.position = new Vector3(0,0,SunR);
Moon.transform.position = new Vector3 (0, 0,EarR);
因为太阳的半径为5,而地球的半径为 1;但是因为没有使用相对位置,所以只能把EarR的值设置为 9。同时还存在一个潜在的问题就是。当我需要移动“太阳系”的时候,需要每一个对象都重新设置位置。
而使用localPosition,则不会有这样的问题:
float SunR = 5f; //相对于太阳是5,此时可以不考虑太阳的位置是不是(0,0,3f)
float EarR = 1f; //此时地球的半径可以设置为1,更方便理解代码
Earth.transform.localPosition = new Vector3 (0,0,SunR);
Moon.transform.localPosition = new Vector3 (0, 0,EarR);
//这表示,地球在相对于太阳的前面forward8个单位的位置,而月亮有在相对地球前面一个单位的位置
此时,再次移动太阳的位置,则地球和月亮还是可以和太阳的位置保持一致的
Transform小结
Transform首先是一个 组件;
用来描述对象的3个特性:
Position位置,rotation角度,Scale比例
所有的对象都是有 Transform 的。
关于transform的方法和变量,可以查询这个网站
特别的:Transform 还可以用来查找,获取对象
半径内随机部署物体的子程序
代码和注释如下:
void ScatterObject(Vector3 p, float radius, int number, GameObject obj){
// p对应是目标位置,radius对应的是半径,number对应的是要生成的怪物数,而obj对应的是要生成的对象