Tconfig мод Surfpup'а вики
Advertisement

Введение[]

W1K здесь. Цель этого руководства заключается в том, чтобы объяснить простым способом, как создать свой собственный AI NPC с нуля. В этом уроке мы будем использовать код моего босса Rathalos (это, вероятно, одна из самых простых AI и работает почти как глаз Ктулху), и я проведу Вас через каждый шаг его создания.

Требования[]

Для этого нам понадобится рабочий NPC. Этот учебник будет объяснять ТОЛЬКО, как создать рабочие и простые летающие AI. Любое другое объяснение (о статистике NPC, спрайты и т.п.) рассматривается в "Туториал по вражескому NPC".

Приступая к работе[]

Прежде всего, нам необходим рабочий NPC. Каждый вид NPC будет хорош, но я предлагаю враждебного и, возможно, летающего.

Для начала работы нам необходимо .cs файл для нашего NPC. В нем мы пишем метод ИИ, как это.

public void AI()
{
}

В этом мы будем писать поведение каждого NPC. Если мы хотим использовать наш код по оригинальному AI, нам нужно добавить следующее:

npc.AI(true);

И наш код будет выглядеть следующим образом:

public void AI()
{
npc.AI(true);
}

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

Примечание: Использование оригинального AI может вызвать массу проблем при использовании в том числе AI NPC (мы поговорим об этом во второй части этой обучающей программы), в том числе порча величины, модели поведения и случайные сбои.

Часть 1: Основные движения[]

Прежде всего, наш NPC будут просто стоять, если мы не накодируем ему движения. Прежде чем сделать это, нам нужен наш NPC, фактически целевой игрок. Для этого мы можем дать ему цель с помощью этого:

npc.TargetClosest(true);

Каждый раз, когда это называют, NPC будет направлен ​​на ближайшего игрока. Теперь мы можем заставить его двигаться.

В этом случае мы легко заставим его идти влево, если целевой игрок слева от него. Это можно сделать с этим кодом.

if (Main.player[npc.target].position.X < npc.position.X)
{
npc.velocity.X = -8;
}

Проанализируем его. В этом случае npc.target является идентификатором для выбранного игрока. Main.player [npc.target]. Position.X - позиция выбранного игрока в мире, в то время npc.position.X это положение NPC в мире. Если X игрока ниже, чем у NPC, она будет менять скорость NPC. Скорость определяет, сколько X будет уменьшаться каждый раз, когда метод AI вызывается (30-60 раз в секунду). В этом случае npc.velocity.X будет установлен до -8, поэтому она будет уменьшать X на 8 единиц каждый раз, так что NPC действительно будет двигаться влево каждый раз, когда выполняется условие.

Но сейчас есть проблемы. Установка npc.velocity.X до -8 только заставляет NPC двигаться в направлении, без всяких ускорений. Мы легко можем это исправить, отредактировав следующий код:

if (Main.player[npc.target].position.X < npc.position.X)
{
if (npc.velocity.X > -8) npc.velocity.X -= 0.22f;
}

Практически все работает так же, за исключением изменения значения скорости. Теперь, если npc.velocity.X больше, чем -8, он будет вычитать 0,22 от скорости фактического NPC. Просто в этом случае, -8 это максимальная скорость и 0,22 значение ускорения. Это позволит постепенно увеличить скорость NPC, вместо того, установив значение мгновенно.

Advertisement