Как я могу увеличить y порожденного объекта (Instantiate)? - PullRequest
3 голосов
/ 27 апреля 2020

Как я могу сделать prefab2 ​​Instanitiate при более высоком y, чем prefab1. Они появляются случайно из одной и той же позиции. Код:

// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
    if (Time.time > nextSpawn)
    {

        what = Random.Range(1, 3);
        Debug.Log(what);
        switch (what)
        {
            case 1:
                Instantiate(prefab1, transform.position, Quaternion.identity);
                break;
            case 2:
                Instantiate(prefab2, transform.position.y, Quaternion.identity);
                break;

        }
        nextSpawn = Time.time + SpawnRate;
    }
}

}

Извините, я знаю, что решение, вероятно, очень простое, но я просто не могу его найти.

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Простейшим способом, вероятно, будет создание float (например, public float prefab2YOffset = 1f;), а затем, когда вы создаете экземпляр prefab2, вы можете сделать что-то вроде Instantiate(prefab2, transform.position + Vector3.up * prefab2YOffset, Quaternion.identity);. Vector3.up - это сокращение для записи Vector3 (0, 1, 0), и мы умножаем этот вектор на желаемое смещение по оси y (prefab2YOffset) и добавляем его в исходное положение, в котором вы бы создали экземпляр prefab2.
Я также рекомендовал бы прочитать документацию о том, как работает Vector3.

1 голос
/ 27 апреля 2020

Что-то не так с вашим вызовом метода Instatiate . В способе, которым вы его используете, второй параметр должен иметь тип Vector3, а transform.position.y - тип float. Вот пример кода, который, я думаю, вы найдете полезным.

float spawnRate = 5f;
float spawnTime;

//how high you would like your new object to spawn above transform.position
float yValueDifference = 5f;

void Update () 
{

    if (Time.time - spawnTime > spawnRate) 
    {
        //pick a random number from 0-1
        int type = Random.Range(0, 2);

        Vector3 position = new Vector3(transform.position.x, transform.position.y, transform.position.z);
        if (type == 1)
            position.y += yValueDifference;

        //if type is 0, use prefab1, if type is 1, use prefab2
        GameObject prefab = type == 0 ? prefab1 : prefab2;
        Instantiate(prefab, position, Quaternion.identity);

        //reset the timer
        spawnTime = Time.time;
    }

}
0 голосов
/ 27 апреля 2020
    if (Time.time > nextSpawn)
    {

        what = Random.Range(1, 3);
        Debug.Log(what);
        switch (what)
        {
            case 1:
                Instantiate(prefab1, transform.position, Quaternion.identity);
                break;
            case 2:
                Vector3 tp = new Vector3(transform.position.x, -2, 0);
                Instantiate(prefab2, tp, Quaternion.identity);
                break;

        }
        nextSpawn = Time.time + SpawnRate;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...