Страница 1 из 1

Resources.Load

СообщениеДобавлено: 04 янв 2012, 10:18
Timofeyeff
Доброго дня уважаемым форумчанам. Недавно наткнулся на такой баг.
Вызываю врагов следующим кодом:

Синтаксис:
Используется javascript
var thisEnemy : GameObject = Instantiate (Resources.Load(Enemyes[i][1]), position, Quaternion.identity) as GameObject;


Вроде все работает нормально, но иногда враг дублируется на поле. В доках вроде приведен такой синтаксис:

Синтаксис:
Используется javascript
 var instance : GameObject = Instantiate(Resources.Load("enemy", GameObject));


Но тогда непонятно как определять позицию. Может это я чего то неправильно двелаю? Помогите пожалуйста.
С уважением, Максим.

Re: Resources.Load

СообщениеДобавлено: 04 янв 2012, 10:44
Order
Строчка вырвана из контекста, не понятно чего у вас там происходит ... что дублируется и как должно работать...
в Resources.Load нет глюков !

Re: Resources.Load

СообщениеДобавлено: 04 янв 2012, 10:52
Timofeyeff
В общем вот кусок кода.
Синтаксис:
Используется javascript
function Update () {
        var i : int;
        for (i=0;i<Enemyes.length;i++) {
                if ((parseInt(Enemyes[i][4]) - transform.position.z > 0)&&(parseInt(Enemyes[i][4]) - transform.position.z < visibleDistance)&&(parseInt(Enemyes[i][7])==0)) {
                        var position : Vector3 = new Vector3(0, 0, 0);
                        position = Vector3(parseInt(Enemyes[i][2]),parseInt(Enemyes[i][3]),parseInt(Enemyes[i][4]));
                        var thisEnemy : GameObject = Instantiate (Resources.Load(Enemyes[i][1]), position, Quaternion.identity) as GameObject;
                        Enemyes[i][7] = 1;
                }
        }
}
 


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

Кстати, подбный баг есть и с самим игроком. Раньше я после смерти и дестроя вызывал его префаб через поиск по тегу и отправлял на респ, сейчас гружу из ресурсов. Иногда игрок дублируется на респе. Сразу скажу - у игрока массива нет.

Re: Resources.Load

СообщениеДобавлено: 04 янв 2012, 12:20
Golandez
Добавте проверку на null
Синтаксис:
Используется csharp
GameObject thisEnemy;
if(thisEnemy==null) Instantiate(prefab);

Re: Resources.Load

СообщениеДобавлено: 04 янв 2012, 12:52
Timofeyeff
Непомогло :(

Re: Resources.Load

СообщениеДобавлено: 04 янв 2012, 13:30
raul82
извините не удержался, но это ппц ... не читаемый код
Vector3(parseInt(Enemyes[i][2]),parseInt(Enemyes[i][3]),parseInt(Enemyes[i][4]))
в яве структуры отменили ?
уже представляю себе массив из 50 элементов
45 - угол поворота вокруг X
46 - угол поворота вокруг Y
47 - угол поворота вокруг Z

боюсь даже представить что делает parseInt #:-s

Re: Resources.Load

СообщениеДобавлено: 04 янв 2012, 13:52
Timofeyeff
Хех, а они в яваскрипте были когда нить? Объекты есть, хэштэйбл есть (спасибо .NET), структур нету...
А parseInt - встроенная функция, пытается строку в число преобразовать, так как все данные из файлов в читаются исключительно как строки. Стыдно аксиом не знать.
Но это к делу не относится, лучше помогите с багом разобраться.

Re: Resources.Load

СообщениеДобавлено: 04 янв 2012, 14:10
Левш@
Дублироваться и самопроизвольно размножаться обьект никак не может...
Скорее инстанс не один раз срабатывает. Надо заглушки ставить, или выделенные функции использовать для инстансирования.
Синтаксис:
Используется javascript
if (orderBonus == 1) {
        orderBonus = 0;
        Instantiate(bonus[spawnRandom], bonusPos, transform.rotation);
}