uniyt 的赋值操作是从左到右吗,这句好奇怪?
unity3d吧
全部回复
仅看楼主
level 6
758902 楼主
public Transform prefab;
public int numberOfObjects;
public Vector3 startPosition;
private Vector3 nextPosition;
void Start () {
nextPosition = startPosition;
for (int i = 0; i < numberOfObjects; i++) {
Transform o = (Transform)Instantiate(prefab);
o.localPosition = nextPosition;
nextPosition.x += o.localScale.x;
}
}
Transform o = (Transform)Instantiate(prefab);这句是不是实例化prefab然后返回Transform类型的o?
这里第一次实例化和第二次实例化好像没有什么区别,第一次实例后变化的好像只有nextPosition.x,但是测试中显示,第一次和第二次的创建位置是不一样的,有人能帮忙解释下不?
2014年12月02日 02点12分 1
level 1
[喷]nextPosition一直在变啊
    ----------El Psy Congroo----------
2014年12月02日 02点12分 2
可是实力的时候不是直接和变量o联系的吗,nextPosition不是一个中间变量吗,只存储和传递一下,莫非我理解错了?求教
2014年12月02日 04点12分
level 12
[惊讶] 你这么一说我才知道
2014年12月02日 02点12分 3
你知道什么了
2014年12月02日 03点12分
回复 503505950 :[笑眼]我意思是说都没注意到赋值是从左到右
2014年12月02日 05点12分
回复 晒锅不拉风 :我只是瞎猜,应该不是
2014年12月02日 05点12分
level 7
每次克隆一个prefab然后强制转换为Transform类型,赋值给o
o是个临时变量
2014年12月02日 09点12分 4
那再问一个,我如果再update里这么写应该是不对的,prefab.localPosition = new Vector3(1,1,1); , 也就是说对于Transform类型的引用(这种一定是预设的引用吗?)而言,是无法通过直接给引用赋值而实现对当前对象的操作的,我的理解对不对,我目前测试是这样的..[呵呵]
2014年12月03日 01点12分
那个什么prefab是你自己弄出来的。 你要改变脚本所挂接的gameObject的transform,直接transform.position = xxxx 你那个prefab只是你脚本里自己声明了一个Transform类型的变量而已。
2014年12月03日 02点12分
回复 atpx0001 :懂了 谢谢
2014年12月04日 07点12分
level 13
楼上正解
o是一个Transfrom类型的变量;
Instantiate这个函数的返回值是被创建出来的新物体(Object);
在“Instantiate”前面加上“(Transform)”会把Instantiate的返回值从Object给转换成Transform;
当返回值转换为Transform之后,以返回值来给o赋值。
o在左边,Instantiate在右边,因此是从右向左赋值,而不是从左向右赋值。
2014年12月04日 23点12分 5
level 13
因此现在o的的值为新创建的物体的Transform。
之后改变o这个Transform的位置(position)
之后决定下一个被创建的物体的位置(Nextposition += o.localscale.x)
于是之后又有新的物体通过Instantiate被创建,并赋值给o
然后又移动o(也就是新创建的物体的Transform)的位置,然后又决定一个新的位置供下次使用....
最后会创建出数量与numberOfObjects相同的物体,这些物体的位置都不一样(它们会在x轴上排成一行)
2014年12月04日 23点12分 6
[真棒]解释的很详细,太感谢了
2014年12月05日 01点12分
1