unity 为什么 Update()写 transform.position.Normalize() //设置此为向量为单位向量 没有反应!
- Unity里面,transform.position 的单位是什么?
- Unity中怎样写代码设置transform的position在x和z上值不变,y轴上的值为10?
- unity3-unity c#中为什么不能直接更改transform,position,x的值
- 为什么不能直接更改transform.position.x的值
Unity里面,transform.position 的单位是什么?
transform.position 的单位是Vector3 类型,记录的是空间物体在空间的位置,你说的像素是屏幕的位置吧,只有通过运行平台的分辨率进行大概的计算。 而你说的Size 是一个float类型的变量,只能通过Camera.Size进行获取和赋值!
Unity中怎样写代码设置transform的position在x和z上值不变,y轴上的值为10?
通常 你设置完以后,不去修改它,它自然是不会变(去除可以移动的内容,比如碰撞重力或者使其移动的代码)
也可以在Update中,书写该设置的代码语句(可以加个if判断,if(条件)
{
你的东西.transform.Position=Vector3.one*10;
}
类似这样,这样 当条件为true时,Update开始每帧调用该语句,以至于物体会一直保持在该位置无法移动)
当然 最好是设置个共有变量以供使用 如果 每帧都new 一个Vector的话 可能会产生很多垃圾
unity3-unity c#中为什么不能直接更改transform,position,x的值
因为Vecter3是struct不是class,你改了也没用,毕竟你改的 .x 已经不是 它的 .x 了。
为什么不能直接更改transform.position.x的值
这个问题我搞错了,这里修正一下。这是c#中的结构体当作返回值的问题,结构体是值类型,而值传递是复制传递,所以返回的值不是原来的值了,对此返回值的修改是无效的,所以编译器就从源头上禁止了这样的操作。
unity论坛上有这个问题的讨论
The reason you can't directly alter the position vector is because it's actually a copy, not the actual position stored on the transform.
transform.position <--- returns a copy of the position
transform.position.x <--- the "x" value of the copy
transform.position.x = 7.0f <--- sets the "x" value on the copy
C# throws an error because you're setting the "x" value on a copy, which is then destroyed. It's a pointless line that if the compiler didn't pick up on it, could cause a tonne of hair pulling.
UnityScript gets around this when it compiles by converting your code and firing the C# setter:
transform.position.x = 7.0f
when compiled in UnityScript, translates (more or less) to:
var tempVector : Vector3 = transform.position;
tempVector.x = 7.0f;
transform.position = tempVector;
You can infer that because if you replicate this with a custom C# class, you can track as the getters/setters are invoked.