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

NPC проваливаются друг в друга

08.01.2019, 10:16. Показов 2259. Ответов 2

Author24 — интернет-сервис помощи студентам
Добрый день!

У меня на сцене есть игрок и несколько одинаковых NPC которые тупо следуют за игроком и пытаются его убить.
На NPC есть Rigidbody и Personcontroller. Вначале все хорошо, NPC упираются в предметы, толкаются подходя к игроку, но через некоторое время они начинают проникать друг в друга и полностью сливаются.

Вопрос такой - какой collider правильно использовать для NPC?
И правильно ли я запрограммировал их движение?

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
void Update () {
        Vector3 lookAtPosition = player.transform.position;
        lookAtPosition.y = transform.position.y;
        if (controller.isGrounded)
        {
            direction = new Vector3(0f, 0f, 1.0f);
 
            //Текущая гравитация - земля
            _gravity = groundGravity;
 
            direction = transform.TransformDirection(direction) * speed;
            if (Vector3.Distance(lookAtPosition, transform.position) < AttackDistance && _currentKick < 0)
            {
                _currentKick = kickLong;
                anim.SetBool("attact", true);
                anim.SetBool("walk", false);
                manager.makeAttack(this);
            }
            else
            {
                if (_currentKick < 0)
                {
                    anim.SetBool("attact", false);
                    anim.SetBool("walk", true);
                }
            }
        }
        else
        {
            //Если не на земле тогда текущая гравитация - в воздухе
            _gravity = airGravity;
        }
 
        _currentKick -= Time.deltaTime;
        if (_currentKick < 0)
        {
            anim.SetBool("attack", false);
 
        }
 
        direction.y -= _gravity * Time.deltaTime;
 
        controller.Move(direction * Time.deltaTime);
 
        lookAtPosition = player.transform.position;
        lookAtPosition.y = transform.position.y;
        Quaternion rotation = Quaternion.LookRotation(lookAtPosition - transform.localPosition);
        controller.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Random.value * dumping);
        
 
        if (transform.localPosition.z > 1.0f)
        {
            transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, 1.0f);
        }
 
        if (transform.localPosition.z < -1.0f)
        {
            transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, -1.0f);
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2019, 10:16
Ответы с готовыми решениями:

Наложение Collider2D друг на друга
Ситуация: 2 объекта находятся один на другом (наложены друг на друга). У обоих есть коллайдер...

Коллайдеры на немного входят друг в друга!
Товарищи,недавно столкнулся с такой проблемой,коллайдеры немного залезают друг в друга.Когда игрок...

Если друг возле друга стоят 3 одинаковых объекта - удалить их
2 скрипт должен проверять если друг возле друга стоят 3 одинаковых объекта удалить их.

Как сделать чтобы 2 персонажа могли раздавить друг друга по типу марио?
Во время вхождения в триггер уничтожается оба объекта. как это исправить? using UnityEngine;...

2
Эксперт .NETАвтор FAQ
10409 / 5139 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
08.01.2019, 10:46 2
Лучший ответ Сообщение было отмечено Skobloff как решение

Решение

Цитата Сообщение от Skobloff Посмотреть сообщение
controller.Move(direction * Time.deltaTime);
Что такое controller? Что за метод Move?

Скорее всего причина в том, что вы неправильно двигаете NPC. Если вы хотите, что бы работали коллизии и физика, то нельзя двигать объекты просто меняя их позицию. Нужно использовать методы из rigidbody, а именно: AddForce или velocity.
В таком случае тела будут двигаться по законам физики.
0
0 / 0 / 0
Регистрация: 14.02.2015
Сообщений: 20
08.01.2019, 11:06  [ТС] 3
Controller это:
C#
1
private CharacterController controller;
и у него есть метод move и все нормально работает до определенного времени. NPC двигаются, упираются в предметы и друг в друга, но в какой-то момент проникают и далее уже не расходятся.
0
08.01.2019, 11:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2019, 11:06
Помогаю со студенческими работами здесь

Как сделать так чтобы при спавне предметов они отталкивались друг от друга если они спавнятся близко С#
Есть загвоздка, не как не могу понять как это релизовать, приведу пример : происходит спавн кубов...

Как сделать NPC
Такой вопрос. Хочу сделать , чтобы люди ходили как в GTA например по каком-нибудь маршруту. И...

Не передвигается npc(NavMesh)
Хочу написать ии с помощю NavMesh, посмотрел много уроков по этой теме, пробывал много примеров но...

Как создать всех NPC для нового подключенного клиента
Например: хост бегает и может создавать NPC через ClientRpc -&gt; они создаются у всех кто подключен к...


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

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

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