Я провел около часа исследования, как заставить NPC «отталкивать» , что означает убегать от игрока в Unity3d. Везде, где я ищу это, я нахожу массу вещей о том, как заставить NPC бежать к игроку, но никогда не отталкивать. Я новичок в разработке игр, поэтому понятия не имею, как это делать.
dugofound 18 Авг 2020 в 15:58
2 ответа
Лучший ответ
В этом ответе я постараюсь как можно лучше объяснить написанный мною код.
Векторы — это просто массивы чисел с плавающей запятой. Vector2 содержит два числа с плавающей запятой, Vector3 содержит 3 числа с плавающей запятой . В Unity Vector3 используется для позиций и направлений.
Vector3 direction = NPCPosition — playerPosition;
Создаем направление Vector3. Берем Vector3 NCPPosition — playerPosition. Итак, почему мы это делаем? Представьте себе две точки в одной строке. скажем, вы хотите получить расстояние, которое должна пройти вторая точка на линии, чтобы достичь первой точки. Допустим, первая точка находится на расстоянии 1 дюйма от начальной точки линии.
Как заставить моба двигаться в нужном направлении в Майнкрафт ПЕ | Tower Defense Bedrock Edition
Допустим, вторая точка находится на расстоянии 2 дюймов от начальной точки линии. Итак, в каком направлении должна двигаться вторая точка, чтобы уйти от первой точки? Что ж, направо. И как это рассчитать? Мы берем положение точки, которую хотим переместить, и вычитаем положение точки, от которой хотим уйти.
Это даст нам значение (1). Это означает, что мы можем переместиться на 1 дюйм вправо. Если бы точки находились на разных позициях, допустим, точка, которую мы хотим переместить, находится на 2, а точка, от которой мы хотим отойти, на 5, вычисление выше вернет -3. Это означает, что мы могли бы переместить -3 дюйма в вправо (3 дюйма влево), чтобы отойти от точки.
Теперь давайте сделаем это для всех осей (x, y и z). Получим Вектор 3 с направлением, в котором мы хотим двигаться (от игрока).
Во второй строке
direction.y = 0;
Мы устанавливаем ось y равной нулю. Зачем? В Unity ось Y представляет собой вверх и вниз. И поскольку мы не хотим, чтобы NPC просто улетал (если он выше игрока) и отставал от земли (когда он ниже игрока), мы устанавливаем эту ось равной нулю.
Я забыл эту строку в своем предыдущем ответе:
direction = Vector3.Normalize(direction);
В этой строке мы делаем направление на самом деле просто направлением (извините за плохое объяснение этого). И это потому, что мы учитываем разницу в глобальном пространстве между объектами th и хотим, чтобы NPC просто удалялся с постоянной скоростью. Если бы мы не писали эту строку, скорость NPC изменилась бы при изменении расстояния до игрока.
В следующей строке
NPCTransform.rotation = Quaternion.Euler(direction);
Поворачиваем NPC подальше от игрока. И почему там этот Quaternion.Euler ()? Ну, мы не можем установить вращение на Вектор, мы должны сначала сделать из него Кватернион. Кватернион в Unity используется для вращения.
В последней строке мы фактически перемещаем NPC.
NPCTransform.Translate(transform.forward * NPCSpeed);
В Unity есть много способов переместить объект. Если вы хотите, чтобы у NPC была гравитация (в случае, если он откуда-то упадет, а не просто парил в воздухе: D), вы должны добавить Rigidbody к NPC и проверить «использовать гравитацию». В этом случае последняя строка будет выглядеть вот так вместо NPCTransform.Translate (transform.forward * NPCSpeed) ;:
Как задать путь для НПС в Майнкрафт ПЕ — (Способ 1 из 3/Туториал Minecraft PE) НПС ходит…
NPCRigidbody.AddForce(direction * NPCSpeed);
При использовании преобразования для перемещения NPC мы использовали бы строку выше:
Метод translate перемещает преобразование (объект (в нашем случае NPC)) на указанную нами позицию. Итак, что мы передаем в этом методе? Мы прошли в этом:
Поскольку этот метод перемещает объект на позицию, мы добавляем transform.forward * NPCSpeed. Здесь мы просто берем направление и умножаем его на скорость, с которой мы хотим, чтобы NPC двигался. (скорость — это число, обычно плавающее).
Таким образом, если бы вы использовали преобразование для перемещения NPC, код выглядел бы так:
Vector3 direction = NPCPosition — playerPosition; direction.y = 0; direction = Vector3.Normalize(direction); NPCTransform.rotation = Quaternion.Euler(direction); NPCTransform.Translate(transform.forward * NPCSpeed);
И вот так, если бы вы использовали Rigidbody для перемещения NPC:
Vector3 direction = NPCPosition — playerPosition; direction.y = 0; direction = Vector3.Normalize(direction); NPCTransform.rotation = Quaternion.Euler(direction); NPCRigidbody.AddForce(direction * NPCSpeed);
Я надеюсь, что объяснение достаточно хорошее. 🙂
Zoedingl 19 Авг 2020 в 12:14
Возьмите позиции Vector3 игрока и NPC и выполните следующие вычисления:
Vector3 direction = NPCPosition — playerPosition; direction.y = 0; direction = Vector3.Normalize(direction); NPCTransform.rotation = Quaternion.Euler(direction); //MOVE NPC forward (the calculations above calculate the direction away from the player) NPCTransform.Translate(NPCTransform.position + (transform.forward * NPCSpeed));
Надеюсь, это помогло. 🙂
Если что-то непонятно, просто спросите меня. : D
Изменить: я добавил direction = Vector3.Normalize (direction); линия.
Источник: question-it.com
Как заставить мобов работать вместо себя? Вышел мод Custom NPS для Minecraft 1.8.4
Изобилие модификаций – вот что делает игры по-настоящему успешными. Увлекательнейший геймплей, ультрасовременная графика, кооперативный режим – все это рано или поздно приедается, да и, в общем-то, не имеет значения, если игрок не может добавить в свое любимое развлечение ту или иную деталь, которой, по его мнению, не хватает. И даже такая игра как Майнкрафт не является исключением – именно изобилию модификаций всемирно известная виртуальная песочница и обязана своей популярностью.
Одной из последних и без преувеличения наиболее интересных модификация является Custom NPS. Благодаря данному апгрейду процесс выполнения рутинных задач в майнкрафт упрощается в десятки раз. Так, например, всеми ненавистных процесс добычи камня или дерева можно будет доверить мобам, освободив тем самым свое внимания для решения более интересных игровых задач. По сути, данная модификация превращает мобов в настоящую прислугу.
Причем их навыки не ограничиваются простой добычей элементарных ресурсов. Охота на других мобов, рыбалка, поиск редких элементов, посев и сбор урожая, приручение и разведение животных – все это теперь за вас сделает ваша собственная армия мобов! Помимо всего прочего, мобам можно будет задать свой игровой скин из других модификаций, установить уровни их умений в том или ином ремесле, и даже собственноручно заполнить их инвентарь какими-нибудь уникальными игровыми предметами, например, алмазным мечом.
Для установки Custom NPC потребуется скачать minecraft 1.8.4 и forge соответствующей версии. Теоретически данная модификация может работать с любой версией игры, однако на деле это не всегда так — разработчик создавал её именно под версию 1.8.4, посему наиболее стабильная работа данного мода наблюдается именно в этой версии.
Итак скачиваем CustomNPC для minecraft 1.8.4. После загрузки файлы модификации следует расположить в папке mods вашей игры.
Смотрите, что у нас есть ещё:
- MinePainter для Minecraft – почувствуй себя художником!
- Меняем погоду в Майнкрафт
- Подробная инструкция по установке пакетов текстур, модов и шейдеров MineCraft
- Новые ресурсы, монстры и даже девушки в OreSpawn Mod
Нет комментариев
Нажмите, чтобы отменить ответ.
Кто мы такие?
Разделы сайта
- Bukkit (12)
- Антигриф (2)
- Настройка (3)
- Телепортация (5)
- Новости (64)
- Обновления (55)
- Новости (53)
- Сервер (53)
- Сервисы (4)
- Ловушки (2)
- Механизмы (15)
- Постройки (19)
- Редстоун (3)
- Фермы (3)
- Counter-Strike (3)
- Cтроительство (19)
- IT/Софт (52)
- SEO (8)
- Steam (2)
- Авто/Мото (56)
- Аксессуары (25)
- бизнес (113)
- Бытовая техника (14)
- Велосипеды (2)
- Дом (41)
- другие игры (149)
- еда (34)
- Животные (3)
- Здоровье (78)
- интернет (154)
- Интерьер (11)
- казино (442)
- Книги (4)
- Компьютерная техника (20)
- Криптовалюта (11)
- мебель (17)
- Медицина (25)
- Мода и Стиль (11)
- Мода и стиль (36)
- недвижимость (19)
- Новости (2)
- Обзоры (7)
- Оборудование (26)
- Образование (18)
- обустройство дома (45)
- отдых (18)
- Парфюмерия (5)
- Перевозки (16)
- Праздники (13)
- Промышленность и оборудование (27)
- психиатрия (4)
- Работа (11)
- Развлечения (13)
- реклама (29)
- Сельское хозяйство (6)
- Софт (14)
- Социальные сети (1)
- Спецтехника (1)
- Спорт (23)
- Строительство (7)
- Стройматериалы (4)
- Технологии (24)
- транспорт (7)
- Туризм (5)
- Услуги (78)
- Юридические услуги (10)
- Криптовалюта (6)
- Counter-Strike (11)
- Медицина и Здоровье (4)
- Отдых (7)
- Спорт (16)
- Сервер (5)
- Скрипты (1)
- Моды (46)
- Программы (5)
Последние обновления в блогах
Интересное / Почему Minecraft так популярен
Медицина и Здоровье / Лечение наркомании в Москве в медицинском центре «Корсаков»
Фильмы / Интересные исторические факты о ювелирных изделиях
Counter-Strike / Как прокачивается скин на сайте ForceDrop?
Моды / Моды для Minecraft
Отдых / Популярная современная и классическая музыка
Новости / Майнкрафт на Андроид бесплатно
Counter-Strike / Преимущества сайта краша скинов CSGO4FUN
Интересное / В новом обновлении Brawl Star добавили Бастера
Фильмы / Видео для социальных сетей
Прямой эфир
Полезное
- Заказ услуги Трезвый водитель
- Як правильно організувати посадку у вагон
- Как найти хорошего флеболога
- СУБД на платформе Tantor
- Чому варто грати у GTA-Ukraine
Источник: minersss.com
Как заставить нпс двигаться в майнкрафт
Сообщений: 771
Как заставить НПС смотреть в заданую точку
Автор статьи: Jоhann
Что бы нпс стоял на месте можно использовать логику walker и чтобы он смотрел в заданую точку.
Снимаем координаты где он стоит, пишим их в all.spawn и сдесь. И снимаеи координаты куда он смотрит, в какую точку
[walker]path_walk = название точки где стоит нпс
path_look = название точки куда смотрит нпс
Это пишим в way_***.ltx в распакованом all.spawn
Координата, где стоит нпс, должна быть такой же, что и писали в самом alife_**.ltx.
[название точки где стоит нпс]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -258.846771,-17.546392,-127.127708 ; ваши координаты
p0:game_vertex_id = 934 ; ваши гаме вертексы
p0:level_vertex_id = 8288 ; ваши левел вертексы
[название точки куда смотрит нпс]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -256.672241,-17.875896,-127.18396 ; ваши координаты
p0:game_vertex_id = 934 ; ваши гаме вертексы
p0:level_vertex_id = 9137 ; ваши левел вертексы
Источник: stalker-gaming.ru