0 / 0 / 0
Регистрация: 16.07.2017
Сообщений: 45
1

Ошибка в коде

01.10.2017, 14:24. Показов 528. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте , вообщем написал код на уровни , где на 1 уровне 20 метеоритов , на 2 40 метеоритов . Во в первых почему то хоть и стоит что на 1 уровне 20 метеоритов , создаётся в 2 раза больше . Во вторых на 1 уровне создаются метеориты и из 1 уровня и из 2 уровня , хотя на 2 уровне создаются только его метеориты.
Вот код , надеюсь найдёте ошибку.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class lvls : MonoBehaviour {
 
    public GameObject meteor;
    public int lvl = 1;
    const int kolm1 = 10;
    const int kol = 40;
    int i1;
    public GUIStyle gs;
    public GameObject[] kolm;
 
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        kolm = GameObject.FindGameObjectsWithTag ("meteor");
        //1lvl
        if (lvl == 1 && i1 < kolm1) {
            for (i1 = 0; i1 < kolm1; i1+= 1) {
                Vector3 pos = new Vector3 (Random.Range (20f, 100f), Random.Range (-5f, 5f));
                Instantiate (meteor, pos, Quaternion.identity);
            }
        }
        if (kolm.Length == 0 && lvl == 1) {
            lvl++;
            i1 = 0;
        }
    //lvl 1
        //lvl2
        if (lvl == 2 && i1 < kol) {
            for (i1 = 0; i1 < kol; i1+= 1) {
                Vector3 pos = new Vector3 (Random.Range (20f, 100f), Random.Range (-5f, 5f));
                Instantiate (meteor, pos, Quaternion.identity);
            }
        }
        if (kolm.Length == 0 && lvl == 2) {
            lvl++;
            i1 = 0;
        }
        //lvl2
P.s. чайник
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2017, 14:24
Ответы с готовыми решениями:

Ошибка в коде
sing UnityEngine; public class fon : MonoBehaviour { public float time = 0.5f; ...

Ошибка в коде JS
написал код который вешается на объект! Объект должен рандомно выбирать одну из целей и идти к ним....

Снова ошибка в коде )
К коду - void Update () { Red(); time3 -= Time.deltaTime; } void Red()...

Ошибка в коде с rigidbody.AddForce (C#)
using UnityEngine; using System.Collections; public class Catcher : MonoBehaviour { public...

7
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
02.10.2017, 10:54 2
Цитата Сообщение от angrydev Посмотреть сообщение
public GameObject[] kolm;
В с# должен быть указан размер массива. Если размер массива динамичный или заранее неизвестен - используйте, например, List<>;
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
02.10.2017, 11:24 3
А почему объекты в сцене, а не в префабах?
Отдельный спавнер сделать с массивом префабов и массивом на количество объектов в уровне и методом генерации.

Добавлено через 4 минуты
C#
1
2
3
4
5
6
7
8
9
10
public GameObject[] prefabs;
public int[] counts;
 
public void Generate(int level)
{
 for (int i=0; i< counts[level]; i++)
 {
   Instantiate(prefabs[level], <some parameters>);
 }
}
В prefabs префабы на каждый уровень, в counts количество на каждый уровень. Нумерация массивов соответствует номерам уровней.
1
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
02.10.2017, 11:29 4
Cr0c, немного "усложненный" вариант
Далеко, конечно, не идеальный, но работающий)))

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System.Collections.Generic;
using UnityEngine;
 
public class Lvls : MonoBehaviour {
 
    [SerializeField] private float xMax, zMax;
    [SerializeField] private GameObject meteorPrefab;
 
    private List<GameObject> meteorOnScene;
    private GameObject parrentForMeteors;
    private int maxMeteoritsOnScene;
    private bool needSpawn;
 
 
    void Start () {
        meteorOnScene = new List<GameObject>();
        parrentForMeteors = new GameObject("Meteorits");
        maxMeteoritsOnScene = 10;
        needSpawn = true;
    }
    
    void Update () {
        if ((meteorOnScene.Count < maxMeteoritsOnScene) && needSpawn)
        {
            meteorOnScene.Add(AddMeteorits(xMax, zMax, meteorPrefab));
        }
        else if(meteorOnScene.Count == maxMeteoritsOnScene)
        {
            needSpawn = false;
        }
 
        DelDeathMeteorits();
    }
 
    /// <summary>
    /// Разместить врага в рандомной позиции
    /// </summary>
    /// <param name="x">Максимальное значение позиции по X</param>
    /// <param name="z">Максимальное значение позиции по Z</param>
    /// <param name="prefab">Префаб врага</param>
    /// <returns>Возвращает GO врага на поле</returns>
    private GameObject AddMeteorits(float x, float z, GameObject prefab)
    {
        Vector3 randomPosition = Vector3.zero;
        randomPosition.y = prefab.transform.position.y;
        randomPosition.x = Random.Range(-x, x);
        randomPosition.z = Random.Range(-z, z);
        Quaternion randAngle = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f);
        GameObject enemy = Instantiate(prefab, randomPosition, randAngle) as GameObject;
        enemy.transform.SetParent(parrentForMeteors.transform);
        return enemy;
    }
 
    /// <summary>
    /// Удаление убитых врагов из списка, переход на следующий уровень
    /// </summary>
    public void DelDeathMeteorits()
    {
        meteorOnScene.RemoveAll(x => !x);
        meteorOnScene.RemoveAll(x => x == null);
 
        if (meteorOnScene.Count == 0)
        {
            maxMeteoritsOnScene += 20;
            needSpawn = true;
        }
    }
}
0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
02.10.2017, 21:42 5
Цитата Сообщение от Serj190492 Посмотреть сообщение
В с# должен быть указан размер массива
Где такое написано?
0
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
02.10.2017, 21:59 6
Цитата Сообщение от Cr0c Посмотреть сообщение
Где такое написано?
Да, действительно... Перечитал и понял, что ошибался.

Не по теме:


Подскажите только вот что. Если например при старте у нас создается массив из 3х элементов, может ли в процессе игры меняться размер этого массива?
Только Resize?

0
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
02.10.2017, 22:09 7
Цитата Сообщение от Serj190492 Посмотреть сообщение
Только Resize?
Да. Это проблема? Массив на то и массив, чтобы не меняться ДИНАМИЧЕСКИ. Но
C#
1
GameObject.FindGameObjectsWithTag
возвращает массив - его и назначаем

Добавлено через 1 минуту
Ещё бывает List<T>.ToArray()
0
0 / 0 / 0
Регистрация: 16.07.2017
Сообщений: 45
03.10.2017, 08:46  [ТС] 8
Цитата Сообщение от Serj190492 Посмотреть сообщение
В с# должен быть указан размер массива. Если размер массива динамичный или заранее неизвестен - используйте, например, List<>;
Метеориты создаются в другом скрипте , массив не назначен , потому то заранее неизвестно сколько будет объектов.

Добавлено через 1 минуту
Спасибо всем за ответы , я нашёл ошибку , во в первых случайно 2 скрипта поместил на сцену , во вторых было недостаточно условий и поэтому спавнилось слишком много метеоритов
0
03.10.2017, 08:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2017, 08:46
Помогаю со студенческими работами здесь

Ошибка в коде, Unity зависает напрочь
Здравствуйте , написал код , в котором повторяется действие пока для этого есть причины. Проблема в...

Ошибка в коде Unity 5. Нет ссылки на объект
Делаю курсовую работу по созданию 2D платформера на Unity5, разбираюсь слабо... В скрипте движения...

Ошибка в коде взаимодействия клиента и сервера на основе протокола TCP/IP (ошибка в коде)
Задание: Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать...

Ошибка с графикой в приложении Windows form (ошибка не в коде!)
Всем доброго времени суток! Написал программу в windows form. Несколько раз скомпилировал и все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru