Пятница, 02 Декабря 2022, 11:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Спавн мобов(С#) (Спавн мобов(С#))
Спавн мобов(С#)
Jlovenpk1Дата: Суббота, 13 Сентября 2014, 10:46 | Сообщение # 1
участник
Сейчас нет на сайте
Не могу понять, где я ошибаюсь? Скрипт не хочет работать, пишет ошибки в коде.
Хелп ми) cry

Код
using UnityEngine;
using System.Collections;

public class SpawnEnemy : MonoBehaviour {
  public GameObject [] oenemy; // Массив мобов
  public Transform [] spawpoint; // их местоположение
  public int maxenemy = 10; // максимальное колличество мобов
  public int mintime = 2; // минимальное время
  public int maxtime = 10; // максимальное время

  // Use this for initialization
  void Start () {
   Spawn (); // вызываю функцию
   
  }
   
  // Update is called once per frame
  void Update () {
   
  }

  void Spawn()
  {
   int i;
   GameObject obect;
   Transform pos;
   for (i=0; i<oenemy; i++)  
   {
    WaitForSeconds(Random.Range(mintime, maxtime));
    obect = GameObject = oenemy[Random.Range(0, oenemy.Length)];
    pos = Transform = spawpoint[Random.Range(0, spawpoint.Length)];
    Instantiate(obect, pos.position, pos.rotation);  

     }
  }
}


DjanStudio
romeo98Дата: Суббота, 13 Сентября 2014, 11:20 | Сообщение # 2
участник
Сейчас нет на сайте
Код
for (i=0; i<oenemy; i++)

Переменная oenemy имеет тип GameObject, а в цикле нужен int. Если ты хочешь узнать кол-во элементов в массиве используй oenemy.Length

Код
obect = GameObject = oenemy[Random.Range(0, oenemy.Length)];
pos = Transform = spawpoint[Random.Range(0, spawpoint.Length)];

Никогда не видел такой синтаксис. Что ты этим хочешь сделать?

Скорее всего ты хотел это:
Код
obect = oenemy[Random.Range(0, oenemy.Length)];         
pos = spawpoint[Random.Range(0, spawpoint.Length)];

Я не понимаю, зачем ты вставил это "= GameObject =". Если ты хочешь конвертировать один тип в другой, это делают так:
Код
obect = (GameObject) oenemy[Random.Range(0, oenemy.Length)];
      pos = (Transform) spawpoint[Random.Range(0, spawpoint.Length)];

Но у тебя это не нужно. Все типы и без конвертации совпадают.

Может так, как ты сделал делается, тогда извини, но я никогда не видел этого.

Сейчас поищу еще ошибок. Скинь ошибку, которую пишет.


Flist - social platform
PuzzleSystem - Open-source Unity Asset
[2D] Mission: Defender


Сообщение отредактировал romeo98 - Суббота, 13 Сентября 2014, 11:40
berilДата: Суббота, 13 Сентября 2014, 13:15 | Сообщение # 3
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
WaitForSeconds неправильно используешь. Сопрограмму надо



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
allodsДата: Суббота, 13 Сентября 2014, 18:46 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Ты бы хоть ошибки сюда скопировал angry
Jlovenpk1Дата: Воскресенье, 14 Сентября 2014, 08:59 | Сообщение # 5
участник
Сейчас нет на сайте
Я пытался с Java(будь проклята она, в л2 заела еще меня) переписать в C#.

Вот Java скрипт, исходник.




DjanStudio
romeo98Дата: Воскресенье, 14 Сентября 2014, 09:47 | Сообщение # 6
участник
Сейчас нет на сайте
Во-первых, не Java, а JavaScript. Это разные языки.

Во-вторых, ты переписал код с моими советами? 1-ая ошибка относится, как я уже сказал, к неправильному типу в цикле. 3,4 ошибка, я думаю, что не правильный синтаксис. Я тоже написал как исправить. 2-ая ошибка, наверное beril тебе ее сказал. Про wait. Насчет нее я не знаю.


Flist - social platform
PuzzleSystem - Open-source Unity Asset
[2D] Mission: Defender


Сообщение отредактировал romeo98 - Воскресенье, 14 Сентября 2014, 09:48
allodsДата: Воскресенье, 14 Сентября 2014, 13:48 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
для 2х последних
попробуй

var obj = Random.Range (0,enemyPrefabs.length);
var pos = Random.Range (0,spawnPoints.length);

Instantiate(enemyPrefabs[obj], spawnPoints[pos].position, spawnPoints[pos].rotation);
Jlovenpk1Дата: Воскресенье, 14 Сентября 2014, 18:39 | Сообщение # 8
участник
Сейчас нет на сайте
В общем переделал я код с помощью romeo98, не смог справится с WaitSec и решил использовать таймер, теперь встал, как только таймер падает в 0, все объекты создаются нон - стопно.
Есть вариант, проверять, как только падает в ноль его возвращать в значение обратно, но чего - то идея никак не идет)



DjanStudio
allodsДата: Воскресенье, 14 Сентября 2014, 19:25 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
как только ноли измени на -1 и не будут спавнится
Jlovenpk1Дата: Воскресенье, 14 Сентября 2014, 19:38 | Сообщение # 10
участник
Сейчас нет на сайте
allods, это хорошо, но спавн мобов ни на один раз потребуется, тогда сброс все равно нужен будет, что бы счетчик вставал опять на цифру, которая указана в TimeSp.

DjanStudio
berilДата: Воскресенье, 14 Сентября 2014, 21:10 | Сообщение # 11
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
WaitForSeconds неправильно используешь!!!!!!!!!!!!!!!! в C# нужна сопрограмма( Previous Creating and Destroying GameObjects Next Special Folders and Script Compilation Order Coroutines)

как то так должно быть
Код

using UnityEngine;
using System.Collections;

public class SpawnEnemy : MonoBehaviour {
  public GameObject [] oenemy; // Массив мобов
  public Transform [] spawpoint; // их местоположение
  public int maxenemy = 10; // максимальное колличество мобов
  public int mintime = 2; // минимальное время
  public int maxtime = 10; // максимальное время
   
  // Use this for initialization
  void Start () {

   StartCoroutine(Spawn ());
  }
   
  // Update is called once per frame
  void Update () {
    
  }
   
  IEnumerator Spawn()
  {
   int i;
   GameObject obect;
   Transform pos;
   for (i=0; i<oenemy; i++)   
   {
    yield return new WaitForSeconds(Random.Range(mintime, maxtime));
    obect = GameObject = oenemy[Random.Range(0, oenemy.Length)];
    pos = Transform = spawpoint[Random.Range(0, spawpoint.Length)];
    Instantiate(obect, pos.position, pos.rotation);   
     
   }
  }
}





Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)


Сообщение отредактировал beril - Воскресенье, 14 Сентября 2014, 21:14
Jlovenpk1Дата: Понедельник, 15 Сентября 2014, 13:09 | Сообщение # 12
участник
Сейчас нет на сайте
Плод моих стараний.
Код переделал, всем спс за помощь.

beril, WaitSec не помог все равно добиться результата, они появлялись по одному, а мне нужно было разом пачка, но все равно dankeshеn.


DjanStudio
WhoAmIДата: Вторник, 23 Сентября 2014, 18:06 | Сообщение # 13
Сумасшедший программист
Сейчас нет на сайте
Jlovenpk1, оосподи Иисусе.
Вижу что тебе уже помогли, но настоятельно рекомендую подучить синтаксис C#


Struggle #Gamiron12
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Спавн мобов(С#) (Спавн мобов(С#))
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг