там где gameObject туда мы суем то что должно создаться в данном случае префаб робота. второе new Vector3 это рандомное положение по трем осям от позиции 0 до 250 ну тут сам задашь как пожелаешь. последнее кватернион это направление куда он будет смотреть когда появится я оставил его нулевым там изменишь как пожелаешь.
ps забыл указать что этот код стоит тыкать в момент уничтожения\смерти\удаления(как пожелаешь) робота. TLT-GC Жизнь тебе не фунт изюма, даже если ты изюм.
Сообщение отредактировал TushkaN - Чт, 04 Окт 2012, 23:38
если не создастся обьект с именем(Clone) тогда нужно глянуть что у тебя там если сработает то видемо создание было вписано но не задействовано. TLT-GC Жизнь тебе не фунт изюма, даже если ты изюм.
Все спасибо я написал неправильно вот и не работало)))
Добавлено (05.10.2012, 00:09) --------------------------------------------- Вроде с этим разобрался и понял как это все работает, но появился новый вопрос Как создать несколько точек в которых может появляться робот
Добавлено (05.10.2012, 00:14) --------------------------------------------- Вроде с этим разобрался и понял как это все работает, но появился новый вопрос Как создать несколько точек в которых может появляться робот
это тоже относительно просто тут несколько вариантов. 1) мы делаем объект и называем его типо waypoint_inst , расставляем в нужных местах впихиваем их в массив нашего робота где они рандомом будет выберать позицию вот пример скрипта
Code
using UnityEngine; using System.Collections;
public class way_str : MonoBehaviour {
public Transform[] way_str=new Transform[2];
void OnDestroy() { int rand=Random.Range(0,way_str.Length-1); Instantiate(gameObject,way_str[rand].position,way_str[rand].rotation); } }
2) уже посложнее так как сдесь мы будем кодом искать обьекты в сцене и добовлять их в наши вайпоинты
void OnDestroy() { int rand=Random.Range(0,way_str_obj.Length); Transform way_str=way_str_obj[rand].transform; Instantiate(gameObject,way_str.position,way_str.rotation); } }
второй код не успел проверить на работоспособность но вроде как ошибок не выдало, для поиска используется тег "wayp_inst" по этому пометь обьекты этим тегом что бы они были обнаружены.
ps я допустил ошибку во втором коде уже исправил в рандоме -1 уже не требуется. TLT-GC Жизнь тебе не фунт изюма, даже если ты изюм.
Сообщение отредактировал TushkaN - Пт, 05 Окт 2012, 00:44
я про этот[code void OnDestroy() { Instantiate(gameObject,new Vector3(Random.Range(0,250),Random.Range(1,5),Random.Range(0,250)),Quaternion.Euler(new Vector3(0,0,0))); } [/code]
Добавлено (05.10.2012, 17:40) --------------------------------------------- Робот после выполнения скрипта появляется но он неподвижен как сделать что бы он двигался???
не подвижен хмм, возможно из за того что у него нет жизней и их нужно востановить кстати наверное проще будет сделать префаб робота, что бы создовать уже заготовку а не клон убитого бота. TLT-GC Жизнь тебе не фунт изюма, даже если ты изюм.
если имеется префаб робота в проекте, то можем просто использовать его для создания оригинальных копий, если его нет и робот был построен только в игровой сцене тогда нужно в проекте создать префаб обьект который после и будем использовать для создания копий без изменений, что бы создать префаб кликаем среди файлов ассеста правой клавишей мыши и там create>prefab и туда из игровой сцены скидываем нашего робота, после обновляем наш скриптик (он получился слегка толстоват просто оптимизировать слегка лень)
Code
using UnityEngine; using System.Collections;
//[ExecuteInEditMode] public class script_name : MonoBehaviour {
private GameObject[] way_str_obj; public GameObject gO;
возвращаем префаб на игровое поле, и помещаем префаб который лежит в проекте в нынешнего бота. наверное сложно все описал будут вопросы спрашивай буду как можно проще обьяснять. TLT-GC Жизнь тебе не фунт изюма, даже если ты изюм.
думаю достаточно просто переместить в скрипт там найдешь место оно предположительно должно быть пустым. TLT-GC Жизнь тебе не фунт изюма, даже если ты изюм.
хорошо, в общем дело обстоит так, что бы вызвать префаб в игровом объекте его нужно поместить в скрипт, но сперва в скрипте нужно создать переменную которую можно будет менять вручную, такие переменные создаются с помощью дополнительной команды public(публичная переменная) или private(внутренняя переменная), публичные переменные как раз таки и можем менять вручную или из других скриптов, приватные переменные мы менять можем только с помощью внутрескриптовых команд, теперь из теории в практику. Переменным нужно указать ихнее предназначение например как в данном случае нужно создать переменную для хранения префаба код для этого пишется таким образом
Code
public GameObject val_name;
хочу заметить что создавать публичные и приватные переменные можно только в начале скрипта, это между вот этими участками кода
Code
public class script_name : MonoBehaviour {
public GameObject val_name;//тут
void Start () ...
теперь мы имеем переменную в которую можем закинуть наш префаб просто перетащив его в область скрипта в место GameObject, в дальнейшем мы можем использовать обращение к этой переменной которая будет означать обьект который в ней хранится.
Code
using UnityEngine; using System.Collections;
public class script_name : MonoBehaviour {
public GameObject val_name; //создаем область для хранения префаба
void Start (){
}
void OnDestroy() { if (val_name) //что бы лишний раз не ругался проверяем существует ли префаб в переменной или нет Instantiate(val_name,new Vector3(Random.Range(0,250),Random.Range(1,5),Random.Range(0,250)),Quaternion.Euler(new Vector3(0,0,0)));// создаем префаб в рандомном месте } }
в общем как то так, если что спрашивай попробую ответить как можно подробнее. TLT-GC Жизнь тебе не фунт изюма, даже если ты изюм.
Теперь понял А еще я понял почему не двигались роботы когда создавался клон у него были отключены скрипты AI,Animation,AIAnimation и Damage
Добавлено (06.10.2012, 17:34) --------------------------------------------- Может можно как нибудь сделать что бы когда появлялся клон у него активировались скрипты???