Проблема со спавном лута из разных сундуков

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Проблема со спавном лута из разных сундуков

Сообщение BlackFoxStudio 15 дек 2018, 20:19

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

Синтаксис:
Используется csharp
    public GameObject[] DropItems;
    //public Animation OpenChest;
    private int ItemMasiveLenght;
    public bool Opened;// сундук открыт?
    public float DebugFloat = 1;
 
    void Start ()
    {
        Debug.Log("Размер массива " + DropItems.Length);
        ItemMasiveLenght = DropItems.Length;
        Opened = false;//сундук закрыт !
    }
 
    public void OpenLootChest()
    {
        int ItemNumber = -1;//номер объекта для спавна из массива
        float ItemSpawnPos = 0f;// поз для спавна предметов шобы не стакались
 
        if (Opened == false)// если сундук закрыт
        {
            //OpenChest.CrossFade("OpenChest");
            //Opened = true;// сундук был открыт
            var p = transform.position;
 
            for (int i = ItemMasiveLenght; i > 0; i--)
            {
                ItemNumber += 1;
                ItemSpawnPos += 0.4f;
                Debug.Log(ItemNumber);
                Debug.Log("тупа лутаем чест");//должно стакнуться 3 раза
                var go = Instantiate(DropItems[ItemNumber], new Vector3(p.x + ItemSpawnPos, p.y + DebugFloat, p.z + DebugFloat), Quaternion.identity);
                go.GetComponent<DropedItem>().SpawnItem();//вызов функции где придаем ускорение
 
            }
        }
       
    }
 


скрины:
https://drive.google.com/file/d/1VvTpPz ... sp=sharing
https://drive.google.com/file/d/1WQvGgk ... sp=sharing
https://drive.google.com/file/d/198pqDp ... sp=sharing
BlackFoxStudio
UNец
 
Сообщения: 8
Зарегистрирован: 15 дек 2018, 19:56

Re: Проблема со спавном лута из разных сундуков

Сообщение Xtir 15 дек 2018, 20:28

А где у тебя вызывается функция OpenLootChest? Возможно там проблема.
А если попробовать сначала первый сундук открыть, а потом второй. И потом наоборот, второй и потом первый? Будет разница?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Проблема со спавном лута из разных сундуков

Сообщение BlackFoxStudio 15 дек 2018, 20:32

Xtir писал(а):А где у тебя вызывается функция OpenLootChest? Возможно там проблема.
А если попробовать сначала первый сундук открыть, а потом второй. И потом наоборот, второй и потом первый? Будет разница?


Огромное спасибо что решил помочь!


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

if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, LookTriggerDist, layerMask) && (hit.transform.tag == "LootChest"))
        {
            GameObject.FindWithTag("LootChest").GetComponent<LootChest>().OpenLootChest();//находим имя в нем скрипт
        }
 


при нажатии на любой из сундуков спавнить будет последний
BlackFoxStudio
UNец
 
Сообщения: 8
Зарегистрирован: 15 дек 2018, 19:56

Re: Проблема со спавном лута из разных сундуков

Сообщение Xtir 15 дек 2018, 20:47

BlackFoxStudio писал(а):
Xtir писал(а):А где у тебя вызывается функция OpenLootChest? Возможно там проблема.
А если попробовать сначала первый сундук открыть, а потом второй. И потом наоборот, второй и потом первый? Будет разница?


Огромное спасибо что решил помочь!


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

if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, LookTriggerDist, layerMask) && (hit.transform.tag == "LootChest"))
        {
            GameObject.FindWithTag("LootChest").GetComponent<LootChest>().OpenLootChest();//находим имя в нем скрипт
        }
 


при нажатии на любой из сундуков спавнить будет последний


Ну всё понятно, GameObject.FindWithTag и выбирает последний объект. Лучше сделать так:
Синтаксис:
Используется csharp
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, LookTriggerDist, layerMask) && (hit.transform.tag == "LootChest"))
        {
            LootChest lootChest = hit.gameObject.GetComponent<LootChest>();
            if(lootChest != null) lootChest.OpenLootChest();
        }
 
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Проблема со спавном лута из разных сундуков

Сообщение BlackFoxStudio 15 дек 2018, 21:21

Xtir писал(а):
BlackFoxStudio писал(а):
Xtir писал(а):
Ну всё понятно, GameObject.FindWithTag и выбирает последний объект. Лучше сделать так:
Синтаксис:
Используется csharp
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, LookTriggerDist, layerMask) && (hit.transform.tag == "LootChest"))
        {
            LootChest lootChest = hit.gameObject.GetComponent<LootChest>();
            if(lootChest != null) lootChest.OpenLootChest();
        }
 


Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS1061 "RaycastHit" не содержит определения для "gameObject", и не удалось найти доступный метод расширения "gameObject", принимающий тип "RaycastHit" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
BlackFoxStudio
UNец
 
Сообщения: 8
Зарегистрирован: 15 дек 2018, 19:56

Re: Проблема со спавном лута из разных сундуков

Сообщение Xtir 15 дек 2018, 21:29

BlackFoxStudio писал(а):
Xtir писал(а):
BlackFoxStudio писал(а):
Xtir писал(а):
Ну всё понятно, GameObject.FindWithTag и выбирает последний объект. Лучше сделать так:
Синтаксис:
Используется csharp
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, LookTriggerDist, layerMask) && (hit.transform.tag == "LootChest"))
        {
            LootChest lootChest = hit.gameObject.GetComponent<LootChest>();
            if(lootChest != null) lootChest.OpenLootChest();
        }
 


Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS1061 "RaycastHit" не содержит определения для "gameObject", и не удалось найти доступный метод расширения "gameObject", принимающий тип "RaycastHit" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).


А ну да, сорри. hit.collider, ну или hit.transform, как Вам нравится :)
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Проблема со спавном лута из разных сундуков

Сообщение BlackFoxStudio 15 дек 2018, 22:35

Xtir писал(а):
BlackFoxStudio писал(а):
Xtir писал(а):
BlackFoxStudio писал(а):
Xtir писал(а):

А ну да, сорри. hit.collider, ну или hit.transform, как Вам нравится :)

Огромное вам спасибо :ympeace: всё работает как задумалось
BlackFoxStudio
UNец
 
Сообщения: 8
Зарегистрирован: 15 дек 2018, 19:56


Вернуться в Editor

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

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