Зона триггера или соприкосновение

Программирование на Юнити.

Зона триггера или соприкосновение

Сообщение leningradec 17 янв 2012, 09:52

Здрасте. У меня есть проблема со скриптом, вообщем задумка была такая - когда я нажимаю клавишу происходит удар мечом, дальше если меч касается врага у которого уже имеются поинты (жизни мб), то производится обнаружение этих поитов и их уменьшение на заданное кол-во.
Но я сумел лишь добиться того что если враг уже соприкоснулся с мечом и если я нажимаю атаку, то только тогда он получает по "щщщам".
Вот такой код у меня:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class AttackOne: MonoBehaviour
{
        void OnTriggerStay (Collider other) //если находится в зоне триггера (меч = триггер)
        {
                if (Input.GetKeyUp (KeyCode.E)) Attack (); //если Е нажата то запускается функция Attack ()
        }
       
        private void Attack ()
        {
                EnemyHP eh = (EnemyHP) GetComponent ("EnemyHP"); //поиск у врага скрипта поинтов
                eh.currenthealth (-10); //передает число уменьшения переменной в скрипте EnemyHP
        }
}
 

Помогите а?)
leningradec
UNец
 
Сообщения: 6
Зарегистрирован: 17 янв 2012, 09:40

Re: Зона триггера или соприкосновение

Сообщение trololoid 17 янв 2012, 12:53

Как мечом ударяете? Анимация или так, джоинтом балуетесь?
Аватара пользователя
trololoid
Старожил
 
Сообщения: 712
Зарегистрирован: 15 сен 2011, 19:18
Откуда: Туапсе, Краснодарский край, Россия

Re: Зона триггера или соприкосновение

Сообщение leningradec 17 янв 2012, 13:49

Да анимация.
leningradec
UNец
 
Сообщения: 6
Зарегистрирован: 17 янв 2012, 09:40

Re: Зона триггера или соприкосновение

Сообщение Golandez 17 янв 2012, 13:54

Вот по логике человеческой жизни. Вы ощущаете сначала боль, а потом вас пинают или это происходит все же наоборот ?
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Зона триггера или соприкосновение

Сообщение leningradec 17 янв 2012, 13:56

Все и сразу) Соприкосновение, разумеется после нажатия кнопки для атаки, должно наносить повреждение. Ну и конечно выждать анимацию удара до точки соприкосновения. Ведь получается что при заходе на меч (когда враг движется на вас), а меч просто существует в руке, враг получает свои долгожданные -10 поинтов))
leningradec
UNец
 
Сообщения: 6
Зарегистрирован: 17 янв 2012, 09:40

Re: Зона триггера или соприкосновение

Сообщение Golandez 17 янв 2012, 14:13

leningradec писал(а): Соприкосновение, разумеется после нажатия кнопки для атаки, должно наносить повреждение.

Обьясните логику действия этого шедевра
Синтаксис:
Используется csharp
void OnTriggerStay (Collider other) //если находится в зоне триггера (меч = триггер)
        {
                if (Input.GetKeyUp (KeyCode.E)) Attack (); //если Е нажата то запускается функция Attack ()
        }

Вы после того как нанесли удар мечом еще должны успеть нажать кнопку "Е" ?
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Зона триггера или соприкосновение

Сообщение leningradec 17 янв 2012, 14:29

Golandez писал(а):Обьясните логику действия этого шедевра


Я и говорю что особо логики нету, точнее это кривоскрипт, поэтому я и пишу сюда что бы мне помогли его выпрямить хоть как то. Просто на Е запилена анимация, а этот скрипт я использовал без анимации когда просто кубойдом тыкал другой кубойд. Пробывал еще Enter, но там получалось только когда ИИ сам зайдет на "оружие" если Stay то стоило просто до него дотронуться сразу умерал, потом решил оставить Stay и добавить нажатие на клавишу, что бы функция один раз запускалась.
leningradec
UNец
 
Сообщения: 6
Зарегистрирован: 17 янв 2012, 09:40

Re: Зона триггера или соприкосновение

Сообщение Golandez 17 янв 2012, 14:40

Синтаксис:
Используется csharp
enum Atack {YES,NO}
Atack atack = Atack.NO;

void Update()
      {
        if (Input.GetKeyDown (KeyCode.E)) atack = Atack.YES;
      }

void OnTriggerEnter (Collider other)
       {
          if (atack == Atack.YES) other.gameObject.GetComponent<EnemyHP>().currenthealth (-10);
       }
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Зона триггера или соприкосновение

Сообщение leningradec 17 янв 2012, 15:38

Спасибо, но это практически тоже самое получается. Видимо для такого скрипта просто не подходит OnTriggerEnter или Stay, это видимо не учитывает анимации и срабатывает только когда произойдет движение какого либо объекта.
И что то анимация сильно тормозит, зависает игра если несколько ударов подряд сделать.
leningradec
UNец
 
Сообщения: 6
Зарегистрирован: 17 янв 2012, 09:40

Re: Зона триггера или соприкосновение

Сообщение Golandez 17 янв 2012, 15:42

leningradec писал(а):Спасибо, но это практически тоже самое получается.
Да вы что...Ну тогда вам и карты в руки.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Зона триггера или соприкосновение

Сообщение leningradec 17 янв 2012, 15:59

Нет разумеется лучше)) Логически понятнее теперь происходит удар, но приходится все время двигаться (и именно вперед) что бы жизни отнялись. Просто анимированый удар не учитывается как вход или нахождение.
leningradec
UNец
 
Сообщения: 6
Зарегистрирован: 17 янв 2012, 09:40


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14