Функция if и стрельба с задержкой.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Функция if и стрельба с задержкой.

Сообщение reimon245 26 ноя 2011, 14:33

Добрый день,мучаюсь уже много часов над 2 вещами,которые не знаю как воплотить.
Подскажите пожалуйста как реализовать что если величина curhealth( состояние здоровья врага в данный момент(от 0 до 100)) изменяется то выскакивает ShowhealthBar()(показывается полоса здоровья этого врага), а если ударить другого врага то эта полоса закрывается и появляется другая.

Пытался данное действие совместить со скриптом попадания пули,которая наносит урон,но к сожалению пуля попадает,наносит урон,вызывает скрипт показа здоровья и ломается)А значит закрыть HideHealthBar()уже не может...Поэтому и пытаюсь сделать через изменение здоровья,но не знаю как(

И второе. Есть стрельба,реализованная в виде :
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlayerShoot : MonoBehaviour {
        public int bulletSpeed=100;
        public Transform theBullet;

        void Start () {
               
        }
       
        void Update () {
        if(Input.GetKeyDown(KeyCode.Mouse0)){
        Shoot();
                }
        }


        private void Shoot(){
        Transform bulletCreate=(Transform)Instantiate(theBullet,GameObject.Find("BulletSpawnPoint").transform.position,Quaternion.identity);
        bulletCreate.rigidbody.AddForce(transform.forward*bulletSpeed);

        }
}


Как сделать чтобы между выстрелами был промежуток,да можно вставить между нажатиями мышью задержку, но если я сделаю что стрельба идет при зажатой мыши,чтобы вылетало не чаще 1 патрона в 2 секунды допустим.
Заранее благодарен.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Функция if и стрельба с задержкой.

Сообщение bomberest 26 ноя 2011, 15:16

http://habrahabr.ru/blogs/gdev/112287/ В этом уроке есть один из способом задержки.
Я бы так сделал: повесил на себя или в отдельную систему скрипт, который показывает табличку моей цели, если хп от 0 до 100, хп брать из скрипта, который висит на мобе, которого я ударил в данный момент. Делать проверку при ударе: если я ударил уже другого моба, то заного брать скрипт с цели, если нет, то использовать тот же.
Если у тебя таргетавая система, то просто отображать табличку, если он у тебя в таргете :) Если нет, то можно отображать табличку, если bool переменная true, делать её true, если ты ударил (ставить false, если: ты далеко отошёл или он умер).
P.S. Каким способом ты выводишь табличку на экран? Это 3д объект или гуи?
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Функция if и стрельба с задержкой.

Сообщение reimon245 27 ноя 2011, 12:30

Спасибо bomberest, но я ток учусь скриптингу, и мне бы хотя бы приближенный пример твоих слов в командах....А то у меня беда с тем чтобы брать переменные с клонированных из префаба целей, чтобы здоровье старой убиралось,когда берется здоровье новой,ведьу них всех имена и тэги одинаковые))) Заранее спасибо.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Функция if и стрельба с задержкой.

Сообщение bomberest 27 ноя 2011, 13:29

reimon245 писал(а):Спасибо bomberest, но я ток учусь скриптингу, и мне бы хотя бы приближенный пример твоих слов в командах....А то у меня беда с тем чтобы брать переменные с клонированных из префаба целей, чтобы здоровье старой убиралось,когда берется здоровье новой,ведьу них всех имена и тэги одинаковые))) Заранее спасибо.

Удары у тебя происходят, скорее всего, как соприкосновение коллайдеров поэтому: в событии OnCollisionEnter просто берёшь объект, который коснулся с нами (почитай про это событие, там всё понятно), делаешь этому объекту GetComponent<имя скрипта>(), потом работаешь с перенной хп в этом скрипте. Это сработает только с коснувшимся объектом, потому что идентификаторы разные у всех объектов (если я правильно понимаю :) )
P.S. Этот скрипт вешать нужно на пулю.

Void Update () {}
Void OnCollisionEnter (Collider collider) {тут столкновение}

ScriptNameHP scriptNameHP;
scriptNameHP = Объект.GetComponent<ScriptNameHP >();
scriptNameHP.HPMoba -= 10;

Что-то в таком духе
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Функция if и стрельба с задержкой.

Сообщение reimon245 27 ноя 2011, 13:38

Дак пуля после соприкосновения дестроится и как я понял после этого(методом Debug.Log) ее скрипты больше неактивны(((
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Функция if и стрельба с задержкой.

Сообщение reimon245 27 ноя 2011, 13:40

Да спасибо, я могу показать бар здоровья,но главная проблема его убрать при ударе в другой объект?
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Функция if и стрельба с задержкой.

Сообщение bomberest 27 ноя 2011, 13:41

reimon245 писал(а):Дак пуля после соприкосновения дестроится и как я понял после этого(методом Debug.Log) ее скрипты больше неактивны(((

Так логично бы сделать все действия с отниманием хп и т.п., И В ЭТОМ ЖЕ кадре, а не ожидать смену кадра, дестроить его.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Функция if и стрельба с задержкой.

Сообщение bomberest 27 ноя 2011, 13:45

reimon245 писал(а):Да спасибо, я могу показать бар здоровья,но главная проблема его убрать при ударе в другой объект?

При ударе сохраняешь объект в переменную GameObject, которая не удалится после окончания кадра, а при следующем ударе сравниваешь только что получившийся объект с этой переменной. if (lastObject == nowObject) {} Что-то такое.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Функция if и стрельба с задержкой.

Сообщение reimon245 27 ноя 2011, 13:45

Извиняюсь,наверное разговор пойдет живее если выложу мой скрипт:
Синтаксис:
Используется csharp
using UnityEngine;



public class BulletDamage : MonoBehaviour{

    public int damage=5;

        void OnCollisionEnter (Collision other){

        EnemyHealth eh = other.transform.root.GetComponent<EnemyHealth>();

        if(eh){

            eh.ShowCurrentHealth(-damage);

                        eh.ShowHealthBar();

                }

        Destroy(gameObject);

        }

}

 

Отнятие хп и показ бара ок,работают,но как убирать бар при показе другого бара,или получении урона другим объектом.
Заранее благодарю.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Функция if и стрельба с задержкой.

Сообщение bomberest 27 ноя 2011, 13:49

Бар у тебя должен быть один, если у тебя на сцене всегда он только один. Просто меняй данные в нём и перемещай, если он висит над объектом.
Показ регулируй через bool переменную
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Функция if и стрельба с задержкой.

Сообщение reimon245 27 ноя 2011, 13:54

Вы меня опять не поняли, и я вас соответственно) Бар здоровья у меня висит на экране( в левом верхнем углу появляется при ударе врага),когда я бью 2 врага то бары наслаиваются и это нехорошо. Как сделать чтобы когда бьешь 2 цель 1 бар удалялся.

p.s. Конечно было бы сделать интересно бар над головой врага,ноя тоже не знаю как это сделать.А так может было бы даже проще в плане того,что он убирался бы через n секунд если не бьют эту цель. Но я не знаю как показывать бар над врагом(
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Функция if и стрельба с задержкой.

Сообщение bomberest 27 ноя 2011, 14:10

Потому что ты делаешь неправильно. Раз у тебя он статичный, то не нужно вешать скрипт отрисовки бара на моба, а нужно повесить его так куда-нибудь, чтобы он был у тебя только 1. Тебе нужно просто менять в нём данные
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Функция if и стрельба с задержкой.

Сообщение reimon245 27 ноя 2011, 14:15

Спасибо огромное,буду стараться)))
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 30