Задать вопрос
@Bogdan1616

Как сделать чтобы объекты жили только в области экрана?

Я хочу сделать так, чтобы звёзды спавнились и удалялись вне зоны видимости игрока. Но звезды ведут себя странно (то есть звезды начинают дергаться и появляться, например, только позади игрока и тому подобное) и через некоторое время выдается ошибка: ArgumentOutOfRangeException: 'minValue' cannot be greater than maxValue. Parameter name: minValue
Не могу понять где у меня ошибка в коде
using System.Collections;
using System.Collections.Generic;
using System.Xml.Schema;
using Unity.VisualScripting;
using UnityEngine;
using Random = System.Random;

public class SpawnStars : MonoBehaviour
{
    public GameObject starPrefab;
    public GameObject player;
    Random starPos = new Random();
    private float starPosX;
    private float starPosY;
    GameObject[] starClones = new GameObject[30];

    private void Start()
    {
        for (int i = 0; i < starClones.Length; i++)
        {
            starClones[i] = starSpawn(starClones[i]);
        }
    }

    void Update()
    {
        for (int i = 0; i < starClones.Length; i++)
        {
            if (starClones[i] != null)
            {
                bool _isFar = isFar(starClones[i]);
                if (_isFar == true)
                {
                    Destroy(starClones[i]);
                    starClones[i] = starSpawn(starClones[i]);
                }
            }
        }
    }

    GameObject starSpawn(GameObject star)
    {
        int random = starPos.Next(1, 4);
        switch (random)
        {
            case 1:
                starPosX = FloatRandom((10 - player.transform.position.x), (14 - player.transform.position.x));
                starPosY = FloatRandom((player.transform.position.y - 10), (11 - player.transform.position.y));
                break;
            case 2:
                starPosX = FloatRandom((player.transform.position.x - 14), (player.transform.position.x - 10));
                starPosY = FloatRandom((player.transform.position.y - 10), (11 - player.transform.position.y));
                break;
            case 3:
                starPosX = FloatRandom((player.transform.position.x - 14), (15 - player.transform.position.x));
                starPosY = FloatRandom((6 - player.transform.position.y), (9 - player.transform.position.y));
                break;
            case 4:
                starPosX = FloatRandom((player.transform.position.x - 14), (15 - player.transform.position.x));
                starPosY = FloatRandom((player.transform.position.y - 9), (player.transform.position.y - 6));
                break;
        }
        star = Instantiate(starPrefab, new Vector3(starPosX, starPosY, 0), player.transform.rotation);
        return star;
    } 

    bool isFar(GameObject star) //Проверка на то находится ли звезда достаточно далеко от игрока или нет 
    {
        bool _isFar;
        if (star.transform.position.x - player.transform.position.x >= 15 ||
            star.transform.position.x - player.transform.position.x <= -15 ||
            star.transform.position.y - player.transform.position.y >= 15 ||
            star.transform.position.y - player.transform.position.y <= -15)
        {
            _isFar = true;
        }
        else
        {
            _isFar = false;
        }

        return _isFar;
    } 

    float FloatRandom(float min, float max)
    {
        float random = starPos.Next(Convert.ToInt32(100*min), Convert.ToInt32(100*max));
        return (random / 100);
    } 
}
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Там же где написано название ошибки, там же и строка в коде указана. Побуду Вангой и скажу, что это в float random = ...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы