WasTabon
@WasTabon

While Do не работает?

private void SpawnCluesAndBomb()
    {
        Vector2 firstCluePos;
        Vector2 secondCluePos;
        Vector2 thirdCluePos;

        Vector2 bombPos;

        bool isGood = false;
        
        firstCluePos = new Vector2(RandomInt(0, 256), RandomInt(0, 256));
        do
        {
            secondCluePos = new Vector2(RandomInt(0, 256), RandomInt(0, 256));
        } while (Vector2.Distance(firstCluePos, secondCluePos) < 200f);

        do
        {
            thirdCluePos = new Vector2(RandomInt(0, 256), RandomInt(0, 256));
        } while (Vector2.Distance(firstCluePos, thirdCluePos) < 200f && Vector2.Distance(secondCluePos, thirdCluePos) < 200f);

        do
        {
            bombPos = new Vector2(RandomInt(0, 256), RandomInt(0, 256));
        } while (Vector2.Distance(firstCluePos, bombPos) < 300f && Vector2.Distance(secondCluePos, bombPos) < 300f && Vector2.Distance(thirdCluePos, bombPos) < 300f);

        Instantiate(_clue, firstCluePos, Quaternion.identity);
        Instantiate(_clue, secondCluePos, Quaternion.identity);
        Instantiate(_clue, thirdCluePos, Quaternion.identity);
        
        Instantiate(_bomb, bombPos, Quaternion.identity);
        Debug.Log($"Distance 1: {Vector2.Distance(firstCluePos, bombPos)}, Distance 2: {Vector2.Distance(secondCluePos, bombPos)} Distance 3: {Vector2.Distance(thirdCluePos, bombPos)}");
    }

Вот код, в конце указал чтобы пока дистанция между бомбой и подсказкой меньше 300 оно генерило её снова, но при запуске игры выводит вот это:
641371c8627ed341978831.png

Это я что-то не так сделал, или выводит правильно и что-то не понимаю
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Unity
Ну так первая дистанция больше 300. false && true && true даст false. Цикл и прервется.

P.S. за такие циклы в целом надо руки отрубать. Их время выполнения неизвестно от слова совсем. Могут вообще никогда не завершитсья
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
WasTabon
@WasTabon Автор вопроса
using UnityEngine;

public class ObjectSpawner : MonoBehaviour
{
    public GameObject firstObjectPrefab;
    public GameObject secondObjectPrefab;
    public GameObject thirdObjectPrefab;
    public GameObject bombObjectPrefab;

    private Vector2 firstPos;
    private Vector2 secondPos;
    private Vector2 thirdPos;
    private Vector2 bombPos;

    private void Start()
    {
        SpawnObjects();
    }

    private void SpawnObjects()
    {
        bool validPositions = false;
        while (!validPositions)
        {
            // Generate random positions for all objects
            float angle = Random.Range(0f, Mathf.PI * 2f);
            float distanceFromCenter = Random.Range(0f, 200f);
            firstPos = new Vector2(Mathf.Cos(angle) * distanceFromCenter, Mathf.Sin(angle) * distanceFromCenter);

            angle = Random.Range(0f, Mathf.PI * 2f);
            distanceFromCenter = Random.Range(0f, 200f);
            secondPos = new Vector2(Mathf.Cos(angle) * distanceFromCenter, Mathf.Sin(angle) * distanceFromCenter);

            angle = Random.Range(0f, Mathf.PI * 2f);
            distanceFromCenter = Random.Range(0f, 200f);
            thirdPos = new Vector2(Mathf.Cos(angle) * distanceFromCenter, Mathf.Sin(angle) * distanceFromCenter);

            angle = Random.Range(0f, Mathf.PI * 2f);
            distanceFromCenter = Random.Range(0f, 256f);
            bombPos = new Vector2(Mathf.Cos(angle) * distanceFromCenter, Mathf.Sin(angle) * distanceFromCenter);

            // Check if all positions are valid
            if (Vector2.Distance(firstPos, secondPos) >= 200f &&
                Vector2.Distance(secondPos, thirdPos) >= 200f &&
                Vector2.Distance(thirdPos, firstPos) >= 200f &&
                Vector2.Distance(firstPos, bombPos) >= 256f &&
                Vector2.Distance(secondPos, bombPos) >= 256f &&
                Vector2.Distance(thirdPos, bombPos) >= 256f)
            {
                validPositions = true;
            }
        }

        // Spawn objects at the generated positions
        Instantiate(firstObjectPrefab, firstPos, Quaternion.identity);
        Instantiate(secondObjectPrefab, secondPos, Quaternion.identity);
        Instantiate(thirdObjectPrefab, thirdPos, Quaternion.identity);
        Instantiate(bombObjectPrefab, bombPos, Quaternion.identity);
    }
}


ChatGPT порешал вопрос
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы