Форум программистов, компьютерный форум, киберфорум
Наши страницы

Unity, Unity3D

Войти
Регистрация
Восстановить пароль
 
Vla00
7 / 7 / 3
Регистрация: 06.10.2012
Сообщений: 502
#1

Отключение объекта - Unity, Unity3D

12.09.2015, 12:58. Просмотров 758. Ответов 11
Метки нет (Все метки)

Я создал Terraine. На его повесил скрипт появления ботов каждые 10 секунд.
Но когда убиваю главного бота, сразу генерация останавливается. Как исправить?
Отключение объекта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2015, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отключение объекта (Unity, Unity3D):

Включение и отключение гравитации - Unity, Unity3D
Есть 5-7 префабов(c Rigidbody2D) при старте они висят в воздухе,при нажатии на кнопку начинают падать вниз. Как это сделать? все...

Отключение определения нажатий - Unity, Unity3D
Здравствуйте. Мне нужно полностью отключить свою игру в определённый момент от каких-либо нажатий, вроде рейкастов или инпут-маус. Как это...

Отключение коллайдеров при прыжке - Unity, Unity3D
Здравствуйте! Нужна ваша помощь. Работаю над 2D игрой где персонаж летит вверх когда оттягиваешь мышкой за нижнюю часть и приземляется на...

Отключение скрипта фиксации курсора при нажатии Esc - Unity, Unity3D
Всем привет. Помогите пожалуйста. Написал скрипт в unity на C#. Суть скрипта заключается в отключения скрипта фиксации курсора при нажатии...

Прозрачность объекта - Unity, Unity3D
Добрый день. Делаю прозрачность так Color color = new Color(255,255,255,0.5f); obj.GetComponent<Renderer>().material.color = color; ...

Имя объекта - Unity, Unity3D
Я создал объект star и при размещении более одного объекта на карте, в иерархии добавляется этот объект, но со своим числовым индексом,...

11
Cr0c
465 / 366 / 123
Регистрация: 06.08.2015
Сообщений: 1,558
Завершенные тесты: 1
12.09.2015, 13:34 #2
Зашибись мы телепаты! Без кода ошибку в нем найти можем!
0
Vla00
7 / 7 / 3
Регистрация: 06.10.2012
Сообщений: 502
12.09.2015, 17:16  [ТС] #3
Цитата Сообщение от Cr0c Посмотреть сообщение
Зашибись мы телепаты! Без кода ошибку в нем найти можем!
Какой именно код скидывать?

Добавлено через 27 секунд
Цитата Сообщение от 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
public class StartBotRandom : MonoBehaviour {
 
    public int radiusPlayer;        //радиус спауна мостра
    public float TimeNextRespaun;   //время спауна
    public Transform mob;           //намш моб
    public Transform player;        //игрок
    private float spawnRate = 2;    //для вычисления времени появления моба
 
    // Update is called once per frame (постоянно обновляющая функция "зацикленная")
    void Update () {
        //если время расположения бота меньше чем нужно, мы приступаем к вычислению его позиции и ставим на нашу карту.
        if (TimeNextRespaun < Time.time)
        {
            Spawn();
            TimeNextRespaun = Time.time + spawnRate;
            spawnRate *= 0.98f;
            spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
        }
    }
 
    void Spawn()
    {
        try
        {
            //определяем рандомную позицию бота
            var random = Random.insideUnitCircle.normalized * radiusPlayer;
            //определяем позацию бота
            Vector3 positionBot = new Vector3(player.transform.position.x + random.x, player.transform.position.y + random.y, player.transform.position.z + random.y);
            //размещаем нашего бота на определенную нами позацию
            Instantiate(mob, positionBot, Quaternion.identity);
        }
        catch
        {
        }
    }
}
0
Cr0c
465 / 366 / 123
Регистрация: 06.08.2015
Сообщений: 1,558
Завершенные тесты: 1
12.09.2015, 19:14 #4
Возможно потому, что уничтожается моб, на который ссылается public Transform mob;
Vector3 positionBot = new Vector3(player.transform.position.x + random.x, player.transform.position.y + random.y, player.transform.position.z + random.y);
Тут нет ошибки? Y-позицию надо ли задавать случайно, это же высота?
C#
1
Instantiate(mob, positionBot, Quaternion.identity);
вместо Transform лучше передавать GameObject, все таки
скрипта с убийством моба нет, вдруг Вы там не моба, а префаб убиваете?
0
Vla00
7 / 7 / 3
Регистрация: 06.10.2012
Сообщений: 502
13.09.2015, 16:01  [ТС] #5
Цитата Сообщение от Cr0c Посмотреть сообщение
Возможно потому, что уничтожается моб, на который ссылается public Transform mob;
Vector3 positionBot = new Vector3(player.transform.position.x + random.x, player.transform.position.y + random.y, player.transform.position.z + random.y);
Тут нет ошибки? Y-позицию надо ли задавать случайно, это же высота?
Код C#Выделить код
1
Instantiate(mob, positionBot, Quaternion.identity);
вместо Transform лучше передавать GameObject, все таки
скрипта с убийством моба нет, вдруг Вы там не моба, а префаб убиваете?
Переделал немного. Исправил сразу несколько своих ошибок. все сделал через префаб. Игрока размещаю начально через код.
C#
1
2
3
4
5
6
7
8
    public Transform player;        //игрок
    private float spawnRate = 2;    //для вычисления времени появления моба
 
    void Start()
    {
        Vector3 pos = new Vector3(300f, 320f, 4165f);
        Instantiate(player, pos, Quaternion.identity);
    }
Но у меня есть логика когда бот появляется он сразу начинает атаковать игрока:
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
public class AtackBot : MonoBehaviour {
 
    public Transform mob;           //наш моб
    public Transform player;        //игрок
    public float speedMonster;      //скорость монстра
    
    // Update is called once per frame
    void Update () {
        //поворачиваем нашего бота на игрока
        transform.LookAt(player);
        //начинаем двигаться к игроку
        mob.transform.Translate(0, 0, speedMonster);
        //включаем анимацию движения
        animation.Play("Run");
        Atack();
    }
 
    void Atack()
    {
        RaycastHit hit;
        Vector3 Ray = transform.TransformDirection(Vector3.forward);
        //получаем данные которые у нас в прицеле
        if (Physics.Raycast(transform.position, Ray, out hit, 5))
        {
            //если наша пуля столкнулась с тего "Bot"
            if (hit.collider.tag == "Player")
            {
                animation.Stop();
                Invoke("Bite", 1);
            }
        }
    }
 
    void Bite()
    {
        animation.Play("Bite2");
        Debug.Log("1");
    }
}
Я указал в player игрока (префаб). И боты начинают атаковать то место где игрок первоначально появляется. Как сделать что-бы они атаковали позицию где я нахожусь на данный момент?
0
Cr0c
465 / 366 / 123
Регистрация: 06.08.2015
Сообщений: 1,558
Завершенные тесты: 1
13.09.2015, 19:14 #6
Хоть убей, не пойму, почему трансформ, а не GameObject внутри Instatiate?
Во втором скрипте ссылка public Transform player; //игрок указывает на Instantiate(player, pos, Quaternion.identity); или на префаб?

public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
0
Vla00
7 / 7 / 3
Регистрация: 06.10.2012
Сообщений: 502
13.09.2015, 20:02  [ТС] #7
Цитата Сообщение от Cr0c Посмотреть сообщение
Во втором скрипте ссылка public Transform player; //игрок указывает на Instantiate(player, pos, Quaternion.identity); или на префаб?
На префаб.
Цитата Сообщение от Cr0c Посмотреть сообщение
Хоть убей, не пойму, почему трансформ, а не GameObject внутри Instatiate?
Если допустим я делаю его GameObject то как мне его повернуть на игрока? а так я его поворачиваю командой transform.LookAt(player);
0
Cr0c
465 / 366 / 123
Регистрация: 06.08.2015
Сообщений: 1,558
Завершенные тесты: 1
14.09.2015, 00:30 #8
Цитата Сообщение от Vla00 Посмотреть сообщение
На префаб.
И чему удивляться тогда? Префаб не присутствует на сцене, это источник клонов. Надо работать с клоном, ссылку на который возвращает
C#
1
Instantiate(player, pos, Quaternion.identity);
Цитата Сообщение от Vla00 Посмотреть сообщение
Если допустим я делаю его GameObject то как мне его повернуть на игрока? а так я его поворачиваю командой transform.LookAt(player);
В public надо задавать только то, что не надо будет искать ручками каждый раз ИЛИ поля для доступа из других скриптов для приема/передачи данных. Выход таков:
C#
1
2
3
4
5
6
7
8
public GameObject playerGO;        // игрок
private Transform goTransform;
void Update();
{
if  goTransform = playerGO.transform; // если трансформ пустой - берем его из playerGO
if (goTransform = null) return; // если ГО ещё не передали в скрипт - выходим из функции
// делаем всё что надо
}
В скрипте после создания игрока: передаём ссылку на ГО игрока в скрипт для ботов:
C#
1
GameObject.Find("ГО-со-скриптом-AtackBot").GetComponent<AtackBot>().playerGO = ГО_игрока;
0
Vla00
7 / 7 / 3
Регистрация: 06.10.2012
Сообщений: 502
14.09.2015, 00:59  [ТС] #9
Цитата Сообщение от Cr0c Посмотреть сообщение
скрипте после создания игрока: передаём ссылку на ГО игрока в скрипт для ботов:
Неособо понял. Вообщем я создал 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
public class StartBotRandom : MonoBehaviour {
 
    public int radiusPlayer;        //радиус спауна мостра
    public float TimeNextRespaun;   //время спауна
    public GameObject mob;           //намш моб
    public GameObject player;        //игрок
    private float spawnRate = 2;    //для вычисления времени появления моба
 
    void Start()
    {
        Vector3 pos = new Vector3(300f, 320f, 4165f);
        Instantiate(player, pos, Quaternion.identity);
    }
 
    // Update is called once per frame (постоянно обновляющая функция "зацикленная")
    void Update () {
        //если время расположения бота меньше чем нужно, мы приступаем к вычислению его позиции и ставим на нашу карту.
        if (TimeNextRespaun < Time.time)
        {
            Spawn();
            TimeNextRespaun = Time.time + spawnRate;
            spawnRate *= 0.98f;
            spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
        }
    }
 
    void Spawn()
    {
        try
        {
            //определяем рандомную позицию бота
            var random = Random.insideUnitCircle.normalized * radiusPlayer;
            //определяем позацию бота
            Vector3 positionBot = new Vector3(player.transform.position.x + random.x, 400, player.transform.position.z + random.y);
            //размещаем нашего бота на определенную нами позицию
            Instantiate(mob, positionBot, Quaternion.identity);
        }
        catch
        {
        }
    }
}
Добавлено через 9 минут
Решил немного по другому сделать:
C#
1
2
3
4
private void Awake()
    {
        player = GameObject.Find("Player(Clone)").transform;
    }
Это написал в скрипте атаки.
0
Cr0c
465 / 366 / 123
Регистрация: 06.08.2015
Сообщений: 1,558
Завершенные тесты: 1
14.09.2015, 07:56 #10
Что такое префаб
Спавнер мобов можно на камеру повесить, а логику ботов в бота воткнуть, а бота в префаб.
Instantiate(player, pos, Quaternion.identity); создаёт новый объект при каждом вызове и возвращает ссылку на него. И покажи код создания игрока.
0
Vla00
7 / 7 / 3
Регистрация: 06.10.2012
Сообщений: 502
14.09.2015, 11:47  [ТС] #11
Цитата Сообщение от 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
public int radiusPlayer;
    public float TimeNextRespaun;
    public GameObject mob;
    public GameObject player;
    private float spawnRate = 2;
 
    void Start()
    {
        Vector3 pos = new Vector3(300f, 320f, 4165f);
        Instantiate(player, pos, Quaternion.identity);
    }
 
    // Update is called once per frame (постоянно обновляющая функция "зацикленная")
    void Update () {
        if (TimeNextRespaun < Time.time)
        {
            Spawn();
            TimeNextRespaun = Time.time + spawnRate;
            spawnRate *= 0.98f;
            spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
        }
    }
 
    void Spawn()
    {
        try
        {
            var random = Random.insideUnitCircle.normalized * radiusPlayer;
            Vector3 positionBot = new Vector3(player.transform.position.x + random.x, 400, player.transform.position.z + random.y);
            Instantiate(mob, positionBot, Quaternion.identity);
        }
        catch
        {
        }
    }
0
Cr0c
465 / 366 / 123
Регистрация: 06.08.2015
Сообщений: 1,558
Завершенные тесты: 1
14.09.2015, 12:19 #12
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
public int radiusPlayer;
* * public float TimeNextRespaun;
* * public GameObject mob;
* * public GameObject playerPrefab; // сюда префаб
* * public GameObject player; // здесь будет ссылка на го игрока
* * private float spawnRate = 2;
void Start()
* * {
* * * * Vector3 pos = new Vector3(300f, 320f, 4165f);
* * * * player = Instantiate(playerPrefab, pos, Quaternion.identity);
* * }
// Update is called once per frame (постоянно обновляющая функция "зацикленная")
* * void Update () {
* * * * if (TimeNextRespaun < Time.time)
* * * * {
* * * * * * Spawn();
* * * * * * TimeNextRespaun = Time.time + spawnRate;
* * * * * * spawnRate *= 0.98f;
* * * * * * spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
* * * * }
* * }
void Spawn()
* * {
* * * * try
* * * * {
* * * * * * var random = Random.insideUnitCircle.normalized * radiusPlayer;
* * * * * * Vector3 positionBot = new Vector3(player.transform.position.x + random.x, 400, player.transform.position.z + random.y);
* * * * * * Instantiate(mob, positionBot, Quaternion.identity);
* * * * }
* * * * catch
* * * * {
* * * * }
* * }
0
14.09.2015, 12:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2015, 12:19
Привет! Вот еще темы с ответами:

Перемещение объекта - Unity, Unity3D
Всем привет. Немного запутался с перемещением.. Игра 2d. Нажимаем в любую точку на экране, и начинаем водить пальцем вверх - вниз...

Копирование объекта C# - Unity, Unity3D
Создал Terrain импортировал модельку. Теперь нужно сделать что-бы каждые 10 секунд спаунился моб, в определенном радиусе игрока. Т.е....

Унитожение объекта - Unity, Unity3D
Доброго времени суток. Помогите уничтожить объект. Есть вот такой цикл: public Transform wall; // Use this for initialization ...

Передвижение объекта - Unity, Unity3D
Моя проблема заключается в том что мне нужно чтобы платформа двигалась по оси x , но юнити меня не понимает когда я пишу:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru