Попытка создавать префабы снова и снова в полуслучайных позициях - PullRequest
0 голосов
/ 11 мая 2018

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

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

public class BushSpawner : MonoBehaviour
{

    public GameObject bush;
    private float x = 0f;
    private float y = -.47f;
    private float z = 0f;
    private int bushCount = 0;
    private Vector3 origPos;
    private bool xPlus = false;
    private bool xMinus = false;
    private bool zPlus = false;
    private bool zMinus = false;
    // Use this for initialization
    void Start()
    {
        SpawnBushes();
    }

    // Update is called once per frame
    void Update()
    {

    }

    void SpawnBushes()
    {
        Vector3 startPos = new Vector3(x, y, z);
        Instantiate(bush, startPos, Quaternion.identity);
        bushCount += 1;
        while (bushCount < 100)
        {
            Vector3 checkPos = new Vector3(x, y, z);
            Collider[] intersecting = Physics.OverlapSphere(checkPos, 1f);
            if (intersecting.Length == 0)
            {
                //code to run if nothing is intersecting as the length is 0
                Instantiate(bush, checkPos, Quaternion.identity);
                bushCount += 1;
            }
            else
            {
                //code to run if something is intersecting it
                RollPos();
            }
        }
    }
    void RollPos()
    {
        if (xPlus == true
            && xMinus == true
            && zPlus == true
            && zMinus == true)
        {
            int newRoll = Random.Range(1, 4);
            if (newRoll == 1)
            {
                x += 10f;
            }
            else if (newRoll == 2)
            {
                x -= 10f;
            }
            else if (newRoll == 3)
            {
                z += 10f;
            }
            else if (newRoll == 4)
            {
                z -= 10f;
            }
            xPlus = false;
            xMinus = false;
            zPlus = false;
            zMinus = false;
        }
        else
        {
            int roll = Random.Range(1, 4);
            if (roll == 1)
            {
                if (xPlus == false)
                {
                    x += 2f;
                    xPlus = true;
                }
                else
                {
                    RollPos();
                }
            }
            if (roll == 2)
            {
                if (xMinus == false)
                {
                    x -= 2f;
                    xMinus = true;
                }
                else
                {
                    RollPos();
                }
            }
            if (roll == 3)
            {
                if (zPlus == false)
                {
                    z += 2f;
                    zPlus = true;
                }
                else
                {
                    RollPos();
                }
            }
            if (roll == 4)
            {
                if (zMinus == false)
                {
                    z -= 2f;
                    zMinus = true;
                }
                else
                {
                    RollPos();
                }
            }
        }
    }
}

Я пытался поместить SpawnBushes в Update для запуска, пока bool равен true, а затем сделать его ложным, когда SpawnBushes завершен, но это создает первый куст, затем 99 других кустов в одном случайномПоложение рядом с ним.

Если кто-то может указать мне правильное направление или сказать, что я совершенно не в себе, я был бы очень признателен!

1 Ответ

0 голосов
/ 12 мая 2018

Рон Бейер указал, что у меня не было достаточно большого диапазона в моем Random.Range в RollPos (). Еще раз спасибо, Рон!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...