Страница 3 из 4

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 13:04
Vsquad studio
действительно сложно разобратся

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 13:47
Vsquad studio
Вообще слава Богу, удалось починить

Всё дело в том что в туторе парень пулю не вкладывал в башню. Она висела у него в префабе. lol

Поэтому когда скрипт спрашивал - if (!target) {Destroy(gameObject)} - -- у него пуля не удалялась, так как она только существует в префабе а не в сцене как у меня :))

А я пулю вложил в башню. Поэтому с первой же секунды, пока враг ещё не выбежал скрипт сносил мою пулю. И всё :) :D :D

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 18:20
Vsquad studio
Вопрос, который не могу пока нагуглить

Хочу чтоб пуля продолжила лететь в место смерти врага. Запоминаю позицию в vector3

Но Юнити пишет что это не присвоено. В IF дебаг пишет последнюю позицию, а в ELSE пишет Vector3 не присвоен поэтому лети в ноль

void Update () {
if (target)
{


transform.LookAt(target);
transform.position = Vector3.MoveTowards(transform.position, target.position, Time.deltaTime * Speed);
Vector3 lastBulletPosition = target.transform.position; // здесь позиция норм
Debug.Log(lastBulletPosition);
}


else
{


Debug.Log(lastBulletPosition); // а здесь не присвоено уже
transform.position = Vector3.MoveTowards(transform.position, lastBulletPosition, Time.deltaTime * Speed);

}

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 18:29
1max1
Слышал что-то про локальную и глобальную зону видимости?
Ты когда в условии if (target) объявляешь переменную Vector3 lastBulletPosition, то она существует только в этом блоке { }, я не знаю как у тебя код вообще скомпилировался, потому что дальше ты к ней же обращаешься в другом блоке ><

Должно быть как-то так:
Синтаксис:
Используется csharp
    Vector3 lastBulletPosition; // выносим в глобальную область

    void Update()
    {
        if (target)
        {
            transform.LookAt(target);
            transform.position = Vector3.MoveTowards(transform.position, target.position, Time.deltaTime * Speed);
            lastBulletPosition = target.transform.position; // здесь позиция норм
        }
        else
            transform.position = Vector3.MoveTowards(transform.position, lastBulletPosition, Time.deltaTime * Speed);
    }

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 18:37
Vsquad studio
Нет, не слышал, спасибо.

П.С, Сори что твой код прошлый не могу юзать, чтоб его понять мне надо месяц, а вдруг что то поправить. А тут я гипнотизируюсь уже 2 месяца, хоть что то понимаю

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 18:38
Vsquad studio
А блин, я случайно уже сделал то что ты сказал. Всё равно не пашет!

Синтаксис:
Используется csharp

Vector3 lastBulletPosition;
   
    public Tower twr;
    float i = 0.2f;
    // Use this for initialization

    // Update is called once per frame
    void Update () {
        if (target)
        {


            transform.LookAt(target);
            transform.position = Vector3.MoveTowards(transform.position, target.position, Time.deltaTime * Speed);
            Vector3 lastBulletPosition = target.transform.position;
            Debug.Log(lastBulletPosition);
        }


        else
        {


            Debug.Log(lastBulletPosition);
            transform.position = Vector3.MoveTowards(transform.position, lastBulletPosition, Time.deltaTime * Speed);

        }

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 18:41
Vsquad studio
Изображение

Пишет

Assets/HM_tower_Vsquad/Scripts/bulletTower.cs(11,13): warning CS0649: Field `bulletTower.lastBulletPosition' is never assigned to, and will always have its default value

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 18:49
1max1
А блин, я случайно уже сделал то что ты сказал. Всё равно не пашет!

Ты сделал не то что я сказал(
Вот это:
Vector3 lastBulletPosition = target.transform.position;
Заменяем на это:
lastBulletPosition = target.transform.position;

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 18:55
Vsquad studio
Получилось, спасибо!

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 19:43
AngryCat
Мне кажется, что 1Max1 положен процент дохода с этой игры...

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 21:16
Vsquad studio
Мы как раз продаём этот арт для программистов. Если вы сделаете игру - мы будем очень рады!

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 22:57
Vsquad studio
Есть вопрос. Моя пуля вызывается с задержкой. Возникла ситуация когда враг УЖЕ пропал, а процесс команды на запуск уже запущен.

Гоблин пропал и через пол секунды возникает ядро и пропадает. Можно как то отменить запуск ( который с задржкой ) если вдруг гоблин пропал?

Синтаксис:
Используется javascript
IEnumerator shoot()
        {
                isShoot = true;
                yield return new WaitForSeconds(shootDelay);
                GameObject b = GameObject.Instantiate(bullet,shootElement.position,Quaternion.identity) as GameObject;
                b.GetComponent<bulletTower>().target = target;
        b.GetComponent<bulletTower>().twr = this;
        isShoot = false;
        }

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 23:06
AngryCat
StopCoroutine (shoot());

Re: Наш проект tower defence

СообщениеДобавлено: 06 июл 2019, 23:12
Vsquad studio
lol, я только что поставил условие случайно

if (target)
{
GameObject b = GameObject.Instantiate(bullet, shootElement.position, Quaternion.identity) as GameObject; }

срабатало, всё равно спасибо!

Re: Наш проект tower defence

СообщениеДобавлено: 08 июл 2019, 08:54
Vsquad studio
Подскажите

Хочу чтоб башня поворачивала плавно назад в ноль когда враг пропал, но код ниже делает это супер резко. Quaternion и тем более все приставки к нему в виде Lerp это пока что сложно

Синтаксис:
Используется javascript
LookAtObj.transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.identity, Time.deltaTime);


Что я упустил?