Попробуем создать свой шутер от первого лица, со всеми приходящими способностями для игры.
Здесь написано поэтапно как создать свой шутер.
Прежде Всего надо задать клавиши: Для этого добавьте ConfigureControls (не с чем не соединяем) и открыв можно переписать любую кнопку "под себя". При запуске проекта первый раз нажмите кнопки Ctrl + Shift + F9 там будут писать ваши записаные кнопки, затем вам просто нужно будет и их нажимать которые указываются.
Добавим: Skybox. // Небо. Terrain. // Наша платформа, на которой собственно и будут происходить действия. G-Force. // Гравитация. Cam1StPerson. // Персонаж от первого лица. Velocity. // Какая то стрелка, будет использоваться для прыжка. EventOnInput. // Кнопка для прыжка. EventOnContact. // Связь между персонажем и землей (далее опишем). EventTimer. // Таймер (Объясним потом зачем он).
Теперь соединим всё: Cam1StPerson с G-Force, Terrain, Velocity и EventOnContact. Velocity с EventOnInput. EventOnInput с EventTimer, Velocity, EventOnContact.
---------
В Velocity настраиваем так: Working at start = Отключаем. Seed or Spin = 10. // Сила прыжка.
В EventTimer настраиваем так: // Он для того что бы блокировать попытку двойного пыжка Parameters: = [0.1]=[0.2] [0.1]=[0.2] Repetitions: = 999999999 //Так то любое большое число.
Relationships: EventOnInput = STOP Вот и все, наш персонаж теперь прыгает. при нажатии кнопки которую вы задали.
Добавим: SkinMesh. // Будет являтся нашим скином рук. Projectile. // Штука при помощи которой мы будем стрелять. RigidBody. // Это типа пуля RigidBody. // И это типа пуля EventOnInput. // Кнопка для стрельбы Sprite. // Прицел Script. // Для Фиксации скина SoundEffect. // Для имитации звука выстрела
Теперь соединим всё: SkinMesh с Projectile, Script. Projectile с RigidBody,RigidBody, EventOnInput, SkinMesh. EventOnInput с SoundEffect, Projectile. Script c Cam1StPerson (Который использовали для первого урока) и SkinMesh.
---------
В Projectile настраиваем так: Parameters: Projectile Velocity = 150 // Можете любое на свое усмотрение - это скорость пули. Projectile LifeTime = 1 // Время жизни пули.
В EventOnInput настраиваем так: Parameters: [ Задайте Любую кнопку]
Relationships: Projectile = START ON INPUT SoundEffect = START ON INPUT
---------
В SoundEffect настраиваем так: Прежде всего выберете звук выстрела или что у вас там есть. Parameters: [color=purple]Sound Frequency = 22050 // Можно и на ваше усмотрение Sound Volume = 1 //Это громкость Обе галочки убираем.
---------
В Script пропишем:
Code
Quaternion DeltaOrientation; Vector3 DeltaLocation; void Main() { Quaternion cameraOrientation; Vector3 cameraLocation; Quaternion orientation; Vector3 location; if (iInitializing()) { iQuaternionFromEulerAngles(DeltaOrientation,0,0,0,"xyz"); //Вращение скина DeltaLocation = Vector3(1,-0.7,1.4); //Положение в камере } iObjectOrientation(OBJ_??,cameraOrientation); // ?? - Задайте номер камеры iObjectLocation(OBJ_??,cameraLocation); // ?? - И здесь номер камеры Quaternion objectOrientation; Vector3 objectLocation; iQuaternionMultiply(objectOrientation,DeltaOrientation,cameraOrientation); iVectorRotate(objectLocation,DeltaLocation,cameraOrientation); objectLocation += cameraLocation; iObjectOrientationSet(OBJ_??,objectOrientation); // ?? - Здесь укажите номер скина iObjectLocationSet(OBJ_??,objectLocation); // ?? - И здесь тоже укажите номер скина }
---------
Двум RigidBody Задаем одинаковые параметры: Вначале не забудьте выбрать свою модель или же используйте стандартный шар. Первым делом надо поставить галочку в разделеPhysics: Use bounding sphere as body // для того что бы мы могли менять размер. Position: Scaling X. Y. Z. = [0.1] [0.1] [0.1] // Можете меньше например 0.05 или 0.03 - Размер пули. Вот и все, наш персонаж теперь может и стрелять.
Добавим: SoundEffect // Звук перезарядки будет Counter // Подсчет патронов Counter 1 // Подсчет Обойм ValuePrint // Отображение патронов ValuePrint 1 // Отображение обойм EventOnValue // Такая ерунда - она будет задерживать выстрелы при 0-м балансе EventOnValue 1 // Такая же как выше EventOnInput // Кнопка перезарядки TextPrint // Будет писать что патронов нет TextPrint 1 // Будет писать что кончились обоймы
Теперь соединим всё: SoundEffect с EventOnInput. Counter с ValuePrint 1, EventOnValue 1, EventOnInput, EventOnInput (со второго урока). Counter 1 с ValuePrint, EventOnValue, EventOnInput. EventOnValue с Counter 1, EventOnInput, TextPrint 1. EventOnValue 1 с Counter, TextPrint, EventOnInput (со второго урока).
---------
В Counter настраиваем так: Parameters: Initial value = 50 // Можете любое на свое усмотрение - это кол-во пуль на обойму. Increment = -1 // по сколько пуль отнимать при выстреле.
---------
В Counter 1 настраиваем так: Parameters: Initial value = 5 // Можете любое на свое усмотрение - это кол-во пуль на обойму. Increment = -1 // по сколько пуль отнимать при выстреле.
---------
В ValuePrint настраиваем так: Relationships: Counter 1 = Counter value is the value to PRINT
---------
В ValuePrint 1 настраиваем так: Relationships: Counter = Counter value is the value to PRINT
---------
В EventOnValue настраиваем так: Relationships: EventOnInput = STOP Counter 1 = Counter value is the value to PRINT TextPrint 1 = SHOW
Continuous detection = Включить
---------
В EventOnValue 1 настраиваем так: Relationships: EventOnInput(со второго урока) = STOP Counter = Counter value is the value to PRINT TextPrint = SHOW
Relationships: Counter = RESET ON INPUT Counter 1 = START ON INPUT SoundEffect = START ON INPUT TextPrint = HIDE ON INPUT EventOnValue = IGNORE EventOnInput (со второго урока) = START ON INPUT
---------
В ValuePrint настраиваем так: Text: Visible at start = отключить Текст = No Ammo [R] // можете любой по желанию
---------
В ValuePrint 1 настраиваем так: Text: Visible at start = отключить Текст = No Mags // можете любой по желанию Все теперь при стрельбе будет подсчитываться кол-во патронов и обойм, при 0 балансе стрлять не сможет
Добавим: Character. // Это склеит нашего Бота. SkinMesh. // Скин Бота. RigidBody. // Сфера для ходьбы Бота. Script. // Здесь пропишем Функции для Бота. Counter. // Подсчет HP Бота. EventOnValue // Даст знать что Бот готов(Убит) EventOnLocation. // Радиус поражения для Бота Projectile. // Оружие. RigidBody 1. // Пуля Бота. Можете несколько EventTimer. // Время для перерождения Бота. ValuePrint. // Покажет на экране сколь у бота HP.
Теперь соединим все: Character с SkinMesh, RigidBody, Script, EventOnValue, (Cam1StPerson, Terrain) - C Предыдущих уроков. SkinMesh с EventOnLocation, Script, Character, Projectile. RigidBody с Character, EventOnValue, EventTimer, G-Force, Terrain, Cam1StPerson. - Ну и со всем чего он может касаться. Script с Character, SkinMesh, Projectile, Cam1StPerson. Counter с EventOnLocation, EventOnValue, EventTimer, ValuePrint. EventOnLocation с Counter, SkinMesh, (RigidBody - Которые Игрок использует в качестве пуль "Пред.Уроки" Взять все). EventOnValue с Counter, Character, EventTimer, RigidBody.
---------
В Character настроим так: Controls: Working at strat = оставим включенным Кнопки для управления = Галочки снимем.
В Counter настроим так: Initial value = 100 // Помните вроде что это?. Increment = -20 //Поставил большое отнятие жизни, как никак если ты главный герой, то мочишь гадов с пары выстрелов. ( можете поставить на свое усмотрение).
---------
В EventOnLocation настроим так: Excute opposite action on exiting = Ставим галочку(обязательно). Размер надо прикинуть со скином, это радиус поражения.
Relationships: SkinMesh = PARENT RigidBody = CHECK FOR ENTERNING (OFFSET 1) // Эти RigidBody служать пулями( Пред.Уроки) RigidBody = CHECK FOR ENTERNING (OFFSET 1)// Эти RigidBody служать пулями( Пред.Уроки) RigidBody = CHECK FOR ENTERNING (OFFSET 1)// Эти RigidBody служать пулями( Пред.Уроки) RigidBody = CHECK FOR ENTERNING (OFFSET 1)// Эти RigidBody служать пулями( Пред.Уроки) Counter = SWITCH ON CONDUCTION
---------
В EventOnValue настроим так: Relationships: Counter = Counter value is MONITORED Character = RESET EventTimer = START RigidBody = SWITCH
Valu range = Ставим по нолям.
---------
В EventTimer настроим так: Working at start = Отключим Start time range = [0] [0] // Через сколько начнет действовать таймер End time range = [5] [5] // Можете поставить как вам угодно - это через сколько времени Бот заново возродится, если это вообще надо. Relationships: EventOnValue = RESET RigidBody = RESET Counter = RESET
---------
В Projectile Настроим так: Parameters: Projectile Velocity = [50]// Скорость пули Бота. Projectile lifetime = [2] // Время жизни пули. Relationships: RigidBody = PROJECTILE SkinMesh = PARENT Script = IGNORE Теперь ваш Бот должен следовать за вами, и если вы находитесь от него ближе чем на 25 метров он начинает в вас стрелять. а если вы стреляете в него он умирает и потом заново перерождается.
Добавим: EventOnLocation // Радиус нашего поражения - подогнать размер на усмотрение Counter // Подсчет нашей жизни ValuePrint // Отображалка нашей жизни EventOnValue // Не даст HP уйти в минус.
Теперь соединим все: EventOnLocation с Cam1StPerson (Пред.Уроки), Counter. Counter c ValuePrint, EventOnValue.
---------
В EventOnLocation настроим так: Excute opposite action on exiting = Ставим галочку(обязательно).
Relationships: Cam1StPerson = PARENT Counter = SWITCH ON CONDUCTION RigidBody( Пуля Бота) = CHECK FOR ENTERNING (OFFSET 1)
---------
В Counter настроим так: Initial value = 100 // Ваша жизнь. Increment = -2 // Сколько от попадания в вас отнимет.
---------
В ValuePrint настроим так: Relationships: Counter = Counter is the value PRINT
---------
В EventOnValue настроим так:
Relationships: Counter = Counter is value to MONITORED Value range = [0] [0]. Так же можете задать любое действие при смерти, например ПЕРЕРОЖДЕНИЕ.(RESET) Ну все, теперь у вас будет отниматься HP при попадании бота. Но если вам не нравиться Подсчет жизни цифрами то Здесь описано как создать шкалу.
Добавим: Projectile. // Та самая штука которая стреляет. EventOnLocation. // Радиус поражения. RigidBody. // Сама типа граната. Script. // Без комментариев. EventOnInput. // Кнопка. Trail. // Простая украшалка, можете не добавлять, но без нее не очень. G-Force. // Гравитацию используем в качестве бомбы.(Отдачи) Particles1. // Эффект дыма. Particles2. // Огонь. Particles3. // Еще огонь для большего эффекта. SoundEffect. // Звук взрыва. EventTimer. // Запуск гранаты. EventTimer1. // Стоп гранаты.
Теперь соединим все: Projectile с (Скином вашего оружия-возможно из предыдущих уроков), RigidBody, EventOnInput. EventOnLocation с RigidBody, EventTimer, EventTimer1, RigidBody((Ваш Бот)Пред.Уроки), Counter((Вашего Бота)Пред.Уроки). RigidBody с Trail, Particles1,Particles2, Particles3, EventTimer1, G-Force(Граната), G-Force(Гравитация), Projectile, EventOnLocation, Script, Ну соединить со всеми RigidBody которые он может задеть. Script с RigidBody, G-Force(Граната). EventOnInput с Projectile, Trail, EventTimer. Trail с RigidBody, EventOnInput, EventTimer1. G-Force с Script, ((Cam1StPerson)Пред.Уроки), EventTimer, EventTimer1, (RigidBody Бота). Particles1 с EventTimer, EventTimer1, RigidBody. Particles2 с EventTimer, EventTimer1, RigidBody. Particles3 с EventTimer, EventTimer1, RigidBody. SoundEffect с EventTimer.
Где OBJ_22 = RigidBody(Граната) А OBJ_0 = G-Force (Гранаты-Отдача)
Товарищи ShuterMen'ы постараюсь на днях проверить весь раздел по созданию шутера, исправлю ошибки в уроках и выложу нормальный пример, если есть идеи прошу высказывать