统一设置实例化 GameObject 精灵的 z 变换位置

Set z transform position of an instantiated GameObject sprite in unity

有没有简单(更短)的方法来统一设置实例化游戏对象(精灵)的 z 变换位置?我现在想将每个实例设置为 2。 这是我正在使用的一行代码,我只是想设置 z 位置,这样做似乎很麻烦 - 忽略第一行,因为我只包含它来演示 GameObject 是如何实例化的:

GameObject laser = Instantiate(laserPrefab, transform.position, Quaternion.identity) as GameObject;
laser.transform.position = new Vector3(laser.transform.position.x, laser.transform.position.y, 2);

提前致谢!

Vector3 上有一些扩展方法可能会使它更易于阅读。但我认为它不会比你写的短很多:

喜欢Vector3.MoveTowards

https://docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html

但简短的回答可能是这样的:不。

Vector(2/3) 是一个结构。在这种情况下,它通过统一使用户安全并完全只读,因为您不能真正为结构分配值,因为这会导致结构的新实例。所以你不能做像 laser.transform.position.z = 2 这样的赋值。你总是必须创建一个新的 Vector。

没有更简单的方法可以做到这一点,但您可以创建方法来缩短分配新位置的代码。例如,创建方法如下:

Vector3 SetZ(Vector3 vector, float z)
{
    vector.z = z;
    return vector;
} 

会让你像这样设置新对象的位置

laser.transform.position = SetZ(laser.transform.position, 2);

你必须使用 method,因为直接尝试使用 属性 会导致编译时错误。

transform.position.z = 2;

结果错误:CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable