Трата хп по времени
Добавлено:
10 авг 2018, 23:19
ShadowWarrior
Здравствуйте. А как реализовать одну механику, например у нас есть три жизни(каждая имеет два заряда) и при истечении 10 секунд отнимался один заряд здоровья. Как я понимаю, что через дельта тайм. Я знаю как инстантиэйтить сердца и удалять их, а как удалять их последовательно и при удалении последнего "Конец игры". И само нанесение урона должно происходить если монстр есть на сцене, а при его смерти и появлении другого монстра таймер просто обновляется.
Re: Трата хп по времени
Добавлено:
11 авг 2018, 12:37
kirya_355
ну вот , что-то сделал с помощью корутин
Используется csharp
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
public class waittodie : MonoBehaviour
{
[SerializeField] GameObject[] lives;//в инспекторе скидываешь свои префабы жизней с их позициями 0 это первая и 5(в твоём случае) это последняя
private int n;
public float TimeToHit;//в инспекторе пишешь 10 или сколько там тебе нужно
private bool monster = false;
private GameObject[] allGo;
void Start ()
{
foreach (var v in lives) Instantiate (v);
StartCoroutine (WaitToDie ());
}
void Update ()
{
n = lives.Length;//проверяется сколько жизней
allGo = FindObjectsOfType<GameObject> ();
foreach (GameObject go in allGo)//на сцене ищется объект с тегом монстр
{
if (go.CompareTag ("monster"))//не забудь префабу монстра сделать тег monster
monster = true;
else if (!go.CompareTag ("monster"))
{
monster = false;
TimeToHit=0;
}
}
}
IEnumerator WaitToDie ()
{
while (monster)
{
yield return new WaitForSeconds (TimeToHit);
Destroy (lives[n].gameObject);//разрушается последняя жизнь
yield return null;
}
}
}
Re: Трата хп по времени
Добавлено:
11 авг 2018, 12:57
sledo
Мне кажется что для человека который не может проводить простые вычисления вычитания, работать с корутинами будет немного сложно.
В общем скрипт примерно будет выглядеть так:
Используется csharp
float time = 10;
int количество_жизней = 3
int количество_Зарядов_Жизней = 2
time -= Time.deltaTime;
if(time <= 0)
{
количество_Зарядов_Жизней -= 1;
time = 10;
}
if(количество_Зарядов_Жизней == 0)
{
количество_жизней -=1;
}
if(количество_жизней == 0)
{
//кары небесные
}