#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
функцию, также вам не нужно создавать позиции в каждом кадре…просто создайте его внутри метода создания экземпляра.