Нужна помощь по скрипту с рандомным появлением.

Программирование на Юнити.

Нужна помощь по скрипту с рандомным появлением.

Сообщение FrostedMan 10 фев 2017, 00:20

Ребят, вот начал заниматься Unity, возник вопрос по скриптам.
Как сделать что бы раз в секунду или чаще в отмеченных местах появлялся объект?
Голову ломаю никак не могу понять, помогите пожалуйста.
Суть в чем, есть 9 нор, в которых должны появляться кроты, как только игрок ударит прошлого, только следующий должен появиться в случайной ячейке, не знаю как это можно сделать, буду признателен за помощь.
Забыл указать, платформа это андроид.
Последний раз редактировалось FrostedMan 10 фев 2017, 08:42, всего редактировалось 1 раз.
FrostedMan
UNец
 
Сообщения: 6
Зарегистрирован: 10 фев 2017, 00:17

Re: Нужна помощь!!

Сообщение Anonymyx 10 фев 2017, 00:50

Делаешь массив ячеек, например
Transform[] holes = new Transform[9];

Когда игрок ударил прошлого, начинаешь отсчет, выбираешь случайную точку и создаешь там крота после определенного времени:
Instantiate(molePref, holes[Random.Range(0, 9)],...);
Последний раз редактировалось Anonymyx 10 фев 2017, 01:52, всего редактировалось 1 раз.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Нужна помощь!!

Сообщение FrostedMan 14 фев 2017, 00:29

Anonymyx писал(а):Делаешь массив ячеек, например
Transform[] holes = new Transform[9];

Когда игрок ударил прошлого, начинаешь отсчет, выбираешь случайную точку и создаешь там крота после определенного времени:
Instantiate(molePref, holes[Random.Range(0, 9)],...);





Спасибо. Если не сложно, подскажи как создать массив именно из ячеек, а то в курсах никаких не нашел.
FrostedMan
UNец
 
Сообщения: 6
Зарегистрирован: 10 фев 2017, 00:17

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение samana 14 фев 2017, 00:56

Если в вашем скрипте будет примерно такая запись

Синтаксис:
Используется csharp
public Transform[] holes;


то в инспекторе этого скрипта у вас появится массив и вы сможете вручную задать ему размер, а так же вручную перетащить все ячейки с уровня в слоты этого массива. Теперь из скрипта вы сможете манипулировать этими ячейками.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение istreloi 15 фев 2017, 12:43

Заранее заготовь префабы своих кротов модели + скрипты, и выгружай их через Resources - создал в своем проекте папку и назвал её Resources в ней правой кнопкой создать префаб, далее перетягивай в него своего крота и так создаешь разные виды кротов если нада и называешь их. Далее в своем скрипте можешь создать кнопку при нажатии на которую будет появляться твой крот
Синтаксис:
Используется csharp
 
void OnGUI(){
if(GUI.Button() new React(10,10,100,100), "New Krot")){//это создаст кнопку в координатах на экране монитора x 10 y10 размаром 100 на 100 и именем "New Krot"
random_krot = Random.Range(0,9);  это переменная  которую надо обьявить заранее( private inr random_krot;) в нее ты запишешь рандомное значение от 0 до 9
и далее смотришь какое значение приняла переменная "random_krot"

if(random_krot == 0){
GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject))) as GameObject; //Go_temp это тоже переменная которую нужно заранее обьявить но её тип уже гейм обьект поэтому (private GameObject Go_temp;) в неё ты помещаешь своего крота свой префаб и модель который назвал Krot1
 Go_temp .transform.position = new Vector3(0,5,0); // здесь ты перемещаеш крота на позицию которая тебе нужна (x,y,z)
Go_temp.name = "Krot_1";// а здесь можеш его переименовать в Krot_1 чтоб он в сцене так назывался, чтоп потом ты смог его найти по этому новому имени  в своей сцене и при надобности удолить или переместить вобщем обратиться))
}

}
}
 


Примерно так, скрипт не проверя но суть такова(Это один из многих вариантов) наиболее простой и наиболее грузящий систему)))))))
Аватара пользователя
istreloi
UNец
 
Сообщения: 34
Зарегистрирован: 15 апр 2014, 15:46

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение FrostedMan 15 фев 2017, 20:22

istreloi писал(а):Заранее заготовь префабы своих кротов модели + скрипты, и выгружай их через Resources - создал в своем проекте папку и назвал её Resources в ней правой кнопкой создать префаб, далее перетягивай в него своего крота и так создаешь разные виды кротов если нада и называешь их. Далее в своем скрипте можешь создать кнопку при нажатии на которую будет появляться твой крот
Синтаксис:
Используется csharp
 
void OnGUI(){
if(GUI.Button() new React(10,10,100,100), "New Krot")){//это создаст кнопку в координатах на экране монитора x 10 y10 размаром 100 на 100 и именем "New Krot"
random_krot = Random.Range(0,9);  это переменная  которую надо обьявить заранее( private inr random_krot;) в нее ты запишешь рандомное значение от 0 до 9
и далее смотришь какое значение приняла переменная "random_krot"

if(random_krot == 0){
GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject))) as GameObject; //Go_temp это тоже переменная которую нужно заранее обьявить но её тип уже гейм обьект поэтому (private GameObject Go_temp;) в неё ты помещаешь своего крота свой префаб и модель который назвал Krot1
 Go_temp .transform.position = new Vector3(0,5,0); // здесь ты перемещаеш крота на позицию которая тебе нужна (x,y,z)
Go_temp.name = "Krot_1";// а здесь можеш его переименовать в Krot_1 чтоб он в сцене так назывался, чтоп потом ты смог его найти по этому новому имени  в своей сцене и при надобности удолить или переместить вобщем обратиться))
}

}
}
 


Примерно так, скрипт не проверя но суть такова(Это один из многих вариантов) наиболее простой и наиболее грузящий систему)))))))




У меня выбивает ошибку, типа не знает что такое new, я уже всё перепробовал, не знаю что делать :((
А ещё тип переменной (inr), это опечатка? Если это int то выбивает тучу ошибок, прости за такое количество вопросов, просто действительно новичек :-\
FrostedMan
UNец
 
Сообщения: 6
Зарегистрирован: 10 фев 2017, 00:17

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение samana 15 фев 2017, 21:14

FrostedMan писал(а):У меня выбивает ошибку, типа не знает что такое new, я уже всё перепробовал, не знаю что делать
А ещё тип переменной (inr), это опечатка? Если это int то выбивает тучу ошибок, прости за такое количество вопросов, просто действительно новичек


istreloi, написал вам псевдо код, то-есть набросок (в наших кругах ещё называют "код на коленке"), этот код не нужно копировать к себе, он просто для описания идеи.

Давайте будем разбираться с вашей задачей постепенно. Поэтому начнём с того, чтобы создать скрипт, в нём создать массив и поместить в него ваши норы из уровня.
И показывайте свои результаты в виде кода, если он у вас не работает.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение FrostedMan 15 фев 2017, 21:22

samana писал(а):
FrostedMan писал(а):У меня выбивает ошибку, типа не знает что такое new, я уже всё перепробовал, не знаю что делать
А ещё тип переменной (inr), это опечатка? Если это int то выбивает тучу ошибок, прости за такое количество вопросов, просто действительно новичек


istreloi, написал вам псевдо код, то-есть набросок (в наших кругах ещё называют "код на коленке"), этот код не нужно копировать к себе, он просто для описания идеи.

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



Синтаксис:
Используется csharp
 

        private inr random_krot;
        private GameObject Go_temp;

        void OnGUI(){
                if(GUI.Button( new Rect (10,10,100,100), "New Krot"))
                random_krot = Random.Range(0,8);

                        if(random_krot == 0){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-2.1f,2.4f,0);
                               
                        }
                        if(random_krot ==1){
                                        GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                        Go_temp .transform.position = new Vector3(-0.1f,2.4f,0);
                                       
                        }
                        if(random_krot ==2){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(2,2.4f,0);
                               
                        }
                        if(random_krot ==3){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-2.1f,0.5f,0);
                               
                        }
                        if(random_krot ==4){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-0.1f,0.5f,0);
                               
                        }
                        if(random_krot ==5){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(2,0.5f,0);
                               
                        }
                        if(random_krot ==6){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-2.1f,-1.5f,0);
                               
                                }
                        if(random_krot ==7){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-0.1f,-1.5f,0);
                               
                        }
                        if(random_krot ==8){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(2,-1.5f,0);
                               
                        }


                }

        }

 

Вот так я сделал.
FrostedMan
UNец
 
Сообщения: 6
Зарегистрирован: 10 фев 2017, 00:17

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение samana 15 фев 2017, 21:39

Во-первых код из OnGUI вызывается постоянно, а то и несколько раз за кадр, то-есть все ваши строчки с if(random_krot == ... выполняются очень часто. Если вы хотите, что эти строчки if(random_krot == ... выполнились только после нажатия на вашу кнопку, то заключите всё в фигурные скобки

Синтаксис:
Используется csharp
if(GUI.Button( new Rect (10,10,100,100), "New Krot"))
{
     random_krot = Random.Range(0,8);
     // и всё остальное что у вас там есть
}

------------------------
private inr random_krot; - это конечно опечатка, должно быть int.
------------------------
Ваш код можно оптимизировать, но сейчас это не самое главное (наверно).
------------------------
Переменной private GameObject Go_temp; не назначается новый крот, так как вы создаёте локальную переменную с таким же именем (GameObject Go_temp = Instantiate...)
------------------------
А у вас весь этот код находится вообще в классе от MonoBehaviour? Если вопрос не понятен, то копируйте весь код класса, а не отдельные его части.
------------------------
А может кроты подождут пока вы просто посмотрите уроки для новичков, которых оооочень много в сети?
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение istreloi 20 фев 2017, 12:54

Привет всем )))!

вот примерчики (куски кода).
Синтаксис:
Используется csharp

private GameObject Temp_Krot;  //Это переменная для игровых обьектов на сцене(3д модельки, спрайты, префы и тд) ПРИМЕРНО))))    "private" это означает что ты можешь к ней обращаться только внутри этого скрипта, из другого скрипта ты к этой переменной обращаться не можешь, "GameObject" Это тип (игровой обьект сцены, как я выше написал), "Temp_Krot" Это я решил так назвать эту переменную это имя перепенной.

Temp_Krot = Instantiate(Resources.Load("krot1"),typeof(GameObject))) as GameObject; // А эта строчка присвоит переменной "Temp_Krot" префаб (тоесть модель + скрипт который ты заранее заготовил и положил в папку "Resourses" своего проекта и назвал его "krot1")

Префаб создается через правую кнопку мвши в папке названной "Resourses" (на пустом месте в открытой папке своего проекта(открытой не в проводнике а в редакторе   "unity" в папке  "Resourses") Правой кнопкой выбрал "Create" далее выбрал "Prefab" в папке появиться файлик назови его "krot1")далее перетащи свою модель крота в окно сцены (с текстурами и анимацией чтоб было все впорядке)))Далее он должен появиться в окне иерархии "Hierarchy" (всмысле твоя модель ) вот ты его и перетаскивай из этого окна в окно с твоим префабом прямо на него(какбы заменяя)Вот твой префаб и готов для дальнейшей выгрузки)))))))

 


После как это выполнишь (всмысле только подготовка префаба)

можешь добавить эту строчку в свой проект(Instantiate(Resources.Load("krot1"),typeof(GameObject))) as GameObject;) добавь имено в "void Start()"
Тоесть будет выглядеть так:
Синтаксис:
Используется csharp
void Start(){
Instantiate(Resources.Load("krot1"),typeof(GameObject))) as GameObject;
}
 


Модель крота выгрузиться в сцену один раз так как ты разместил эту строчку в "void Start" она выполняется один раз при загрузки сцены и твой крот будет создан в координатах x = 0,y = 0,z = 0.

Вот писча для размышлений пробуй)))))))
Аватара пользователя
istreloi
UNец
 
Сообщения: 34
Зарегистрирован: 15 апр 2014, 15:46

Re: Нужна помощь по скрипту с рандомным появлением.

Сообщение istreloi 20 фев 2017, 13:00

О дак ты уже все написал? или чтото не работает?

Синтаксис:
Используется csharp
private inr random_krot;
        private GameObject Go_temp;

        void OnGUI(){
                if(GUI.Button( new Rect (10,10,100,100), "New Krot")){
                random_krot = Random.Range(0,8);

                        if(random_krot == 0){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-2.1f,2.4f,0);
                               
                        }
                        if(random_krot ==1){
                                        GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                        Go_temp .transform.position = new Vector3(-0.1f,2.4f,0);
                                       
                        }
                        if(random_krot ==2){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(2,2.4f,0);
                               
                        }
                        if(random_krot ==3){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-2.1f,0.5f,0);
                               
                        }
                        if(random_krot ==4){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-0.1f,0.5f,0);
                               
                        }
                        if(random_krot ==5){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(2,0.5f,0);
                               
                        }
                        if(random_krot ==6){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-2.1f,-1.5f,0);
                               
                                }
                        if(random_krot ==7){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(-0.1f,-1.5f,0);
                               
                        }
                        if(random_krot ==8){
                                GameObject Go_temp = Instantiate(Resources.Load("krot1"),typeof(GameObject)) as GameObject;
                                Go_temp .transform.position = new Vector3(2,-1.5f,0);
                               
                        }


                }

        }
}
 
Аватара пользователя
istreloi
UNец
 
Сообщения: 34
Зарегистрирован: 15 апр 2014, 15:46


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4