修改position的x值,直接修改
transform.position = new Vector3(1,1,1);
transform.position.x = 2;
会报错。
因为position是一个结构体,那么transform.position返回的是一个值类型。
(Vector3是一个struct结构体类型)
所以我们的更改是更改在一个复制体身上,对transform.position.x并没有影响。编译器不会通过这种操作。
Vector3 pos = transform.position;//pos并非引用。
pos.x = 2;
transform.position = pos;
这样就能成功对结构体transform.position.x更改了。
下面是一个回到滚动列表顶部的方法:
//找到节点对象
protected override void InitUIInfo() {
tran_ScrollView = FindChild(this.gameObject, "ScrollView"); tran_Viewport = FindChild(tran_ScrollView.gameObject, "Viewport"); tran_Content = FindChild(tran_Viewport.gameObject, "Content"); }
//回到顶部的方法
private void GoTop() {
localPos = tran_Content.localPosition; localPos.y = 0; tran_Content.localPosition = localPos; //tran_Content.localPosition.x = 0; 不能直接赋值 }
另一种回到顶部的方法:
Scroll View回滚到顶部: 直接赋值或者自己写个Vector3.Lerp()差值移动,NGUI也有:
scroll.content.DOLocalMove(Vector3.zero, 0.2f);
总结:
1,Transform中的position是属性(property)(换成方法也一样,因为属性的实现本质上还是方法)而不是公有字段(fiel)
2,position的类型是Vector3的,而Vector3是Struct类型
3,Struct之间的赋值是拷贝而不是引用