Случайное нерестилище по осям X и Y для нескольких сборных конструкций

#c# #unity3d #compiler-errors

Вопрос:

Поэтому я создал сценарий, который будет создавать различные сборные конструкции в зависимости от нажатия клавиши в определенной позиции x,y. Теперь я хотел отредактировать это так, чтобы вместо того, чтобы появляться в определенной точке, префабы появлялись в области x1,x2 , y1,y2 случайным образом.

Это код, который я сейчас использую

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Instantiator : MonoBehaviour
{
    //Instantiator for Left
    public KeyCode keyToPress;
    public GameObject[] FI;
    public GameObject clone;

    // Update cause update is cooler
    void Update()
    {
        var transform.positionA = Vector2(Random.Range(-12, -10), Random.Range(-1, 1));
        var transform.positionD = Vector2(Random.Range(12, 10), Random.Range(-1, 1));
        var transform.positionS = Vector2(Random.Range(-1, 1), Random.Range(-6, -5));
        var transform.positionW = Vector2(Random.Range(-1, 1), Random.Range(6, 5));

        if (Input.GetKeyDown(KeyCode.A))
        {
            clone = Instantiate(FI[0], positionA, Quaternion.identity);
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            clone = Instantiate(FI[1], positionD, Quaternion.identity);
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            clone = Instantiate(FI[2], positionS, Quaternion.identity);
        }
        else if (Input.GetKeyDown(KeyCode.W))
        {
            clone = Instantiate(FI[3], positionW, Quaternion.identity);
        }

    }
}
 

Однако я получаю синтаксическую ошибку [«,» ожидается и «;» ожидается]

Ответ №1:

Прямой ответ: Вам нужно использовать new ключевое слово для создания нового вектора. Вы не можете использовать transform.position в качестве переменной..вы должны использовать Vector2 positionA = new Vector2(x, y) // or var positionA

Дополнительно: вы можете использовать Random.insideUnitCircle и, который дает вам случайную позицию внутри круга радиусом 1…затем вы можете умножить его на любое число, если хотите увеличить радиус…ex Random.insideUnitCircle * 5 даст вам случайную позицию в круге с радиусом 5.Вы также можете добавить или вычесть его по векторам, чтобы переместить окружность в другую точку. Если вам нужна случайная 3d-позиция…вы можете использовать Random.insideUnitSphere . Например:

 //Spawn an object between (startpos)Vector2(6f, -5f) to (endpos)Vector2(12f, -10f)
Vector2 middle = new Vector2(startpos.x   endpos.x, startpos.y   endpos.y) / 2; // (6   12) / 2 = 18 / 2 = 9(which is the exact middle of 6 and 12)
Instantiate(prefabname, middle   Random.insideUnitCircle * radius, Quaternion.identity);
 

Примечание: Если вы хотите, чтобы случайная позиция исходила из всего квадрата, вам придется использовать традиционную Random.Range функцию, также вам не нужно создавать позиции в каждом кадре…просто создайте его внутри метода создания экземпляра.