Устанавливаем z преобразование позиции экземпляра GameObject в единицу - PullRequest
0 голосов
/ 20 апреля 2020

Есть ли простой (более короткий) способ установить 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);

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Нет более простого способа сделать это, но вы можете создать метод, чтобы сделать ваш код более коротким. Например, создание метода следующим образом:

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

Позволит вам установить позицию нового объекта следующим образом:

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

Вы должны использовать метод, потому что пытаетесь сделать это напрямую, используя свойство может привести к ошибке времени компиляции.

transform.position.z = 2;

Результат к ошибке: CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable

0 голосов
/ 20 апреля 2020

В Vector3 есть несколько методов расширения, которые могут сделать его немного более удобным для чтения. Но я не думаю, что это станет намного короче того, что вы написали:

Как и Vector3.MoveTowards

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

Но короткое Ответ может быть таким: Нет.

Вектор (2/3) является структурой. В этом случае он сделан безопасным для пользователя за счет единства и полностью доступен только для чтения, так как вы не можете реально присвоить значения структуре, потому что это приведет к новому экземпляру структуры. Поэтому вы не можете выполнять такие задания, как laser.transform.position.z = 2. Вам всегда нужно будет создавать новый вектор.

...