Респавн объекта

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

Респавн объекта

Сообщение Dr_Spritz 15 апр 2013, 15:21

Здравствуйте дорогие форумчане!

Недавно столкнулся с проблемой создания объекта с использованием функции описанной в другом классе.

Есть 2 скрипта:

1) Скрипт, в котором описывается сама функция создания объекта на основе префаба

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

public class Respawn : MonoBehaviour {

        public Object PlayerPrefab;
        private Object clone;

        public void Player()
        {      
               
                clone = Instantiate(PlayerPrefab, Vector3.zero, Quaternion.identity);

        }
}
 


2) А вот тут я создаю этот объект в зависимости от каких - либо условий

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

public class test : MonoBehaviour {
       
        Respawn _resp = new Respawn();
       
        // Update is called once per frame
        void Update () {
               
                if(Input.GetKeyDown(KeyCode.Space))
                {
                        _resp.Player();
                }
       
        }
}
 


Далее, вешаю оба скрипта на игровой объект и в инспекторе прикрепляю префаб своего игрока.

При нажатии на пробел по идее должен создаться новый игровой объект на основе указанного префаба, но вместо этого выскакивает ошибка
"ArgumentException: The prefab you want to instantiate is null."

Также пробовал использовать вместо создания объекта выводить сообщение в Debug.Log() ситуация аналогичная, в независимости от того какое я значение введу в инспекторе, в логах вылезает "0". А вот если значение присваивать не через инспектор а в самом скрипте при описании переменных, выводит все хорошо!

Что я не так делаю?? как описать переменную и функцию, чтобы можно было в скрипте присваивать значения через инспектор в юнити??!

ПАМАГИТЕ!! :((
Dr_Spritz
UNец
 
Сообщения: 32
Зарегистрирован: 01 апр 2013, 07:24

Re: Респавн объекта

Сообщение bifidokk 15 апр 2013, 17:56

Сам сегодня столкнулся с этим, похоже в JS это можно, а в C#, потому что вы создаете новый экземпляр класса через Respawn _resp = new Respawn(); поэтому все его переменные как бы не объявлены (пусть меня подправят, если я не прав). Поэтому указание значений в инспекторе ничем не поможет.
bifidokk
UNец
 
Сообщения: 6
Зарегистрирован: 14 авг 2012, 08:45

Re: Респавн объекта

Сообщение KVinS 16 апр 2013, 09:11

А вы выставляли в инспекторе объекта или скрипта?
Я сам с таким завис, когда определил префаб в инспекторе скрипта, а про объект забыл. (вы же вешаете скрипт на объект?)
KVinS
UNIт
 
Сообщения: 76
Зарегистрирован: 14 фев 2013, 22:27

Re: Респавн объекта

Сообщение Dr_Spritz 16 апр 2013, 10:50

KVinS писал(а):А вы выставляли в инспекторе объекта или скрипта?
Я сам с таким завис, когда определил префаб в инспекторе скрипта, а про объект забыл. (вы же вешаете скрипт на объект?)


Конечно вешаю, еслибы я не вешал скрипт на объект, я бы не смог в инспекторе прикрепить к переменной скрипта сам префаб.

На данный момент решил проблему "костылем" через Resources.LoadAssetAtPath("Assets/Player.prefab", typeof(GameObject)), который впоследствии создал очень большую проблему.
Dr_Spritz
UNец
 
Сообщения: 32
Зарегистрирован: 01 апр 2013, 07:24

Re: Респавн объекта

Сообщение KVinS 16 апр 2013, 11:01

Dr_Spritz писал(а):
KVinS писал(а):А вы выставляли в инспекторе объекта или скрипта?

Конечно вешаю, еслибы я не вешал скрипт на объект, я бы не смог в инспекторе прикрепить к переменной скрипта сам префаб.

Простите. Просто у меня как-то получалось.
KVinS
UNIт
 
Сообщения: 76
Зарегистрирован: 14 фев 2013, 22:27

Re: Респавн объекта

Сообщение seaman 16 апр 2013, 20:11

Ошибка тут:
Синтаксис:
Используется csharp
Respawn _resp = new Respawn();

1. Нельзя скрипты наследованные от MonoBehaviour создавать используя new.
2. Если Вы создали так - Вы создали новый объект, а не тот, в котором вы установили префаб. Естественно в нем префаб - null.
На форуме очень много раз обсуждалось как обратиться к другому скрипту.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Респавн объекта

Сообщение Dr_Spritz 16 апр 2013, 21:29

seaman писал(а):Ошибка тут:
Синтаксис:
Используется csharp
Respawn _resp = new Respawn();

1. Нельзя скрипты наследованные от MonoBehaviour создавать используя new.
2. Если Вы создали так - Вы создали новый объект, а не тот, в котором вы установили префаб. Естественно в нем префаб - null.
На форуме очень много раз обсуждалось как обратиться к другому скрипту.


А есть какие-либо другие способы прикрепить префаб к переменной (помимо инспектора)?
Dr_Spritz
UNец
 
Сообщения: 32
Зарегистрирован: 01 апр 2013, 07:24

Re: Респавн объекта

Сообщение seaman 16 апр 2013, 21:35

А чем Вам этот не нравится? Просто нормально получайте свой Respawn и все будет ОК.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Респавн объекта

Сообщение Dr_Spritz 16 апр 2013, 23:10

seaman писал(а):А чем Вам этот не нравится? Просто нормально получайте свой Respawn и все будет ОК.


seaman, я уже не рассматриваю варианты "нравится" и "не нравится" мне уже все равно, лиш бы работало. Я 2 дня убил на эту проблему, а результата нету. Я конечно понимаю что проблема в большей части упирается в моих знаниях, но я реально уже устал ковыряться с этим)
Dr_Spritz
UNец
 
Сообщения: 32
Зарегистрирован: 01 апр 2013, 07:24

Re: Респавн объекта

Сообщение bifidokk 17 апр 2013, 06:35

посмотрите, как я сделал:
viewtopic.php?f=105&t=15247
bifidokk
UNец
 
Сообщения: 6
Зарегистрирован: 14 авг 2012, 08:45

Re: Респавн объекта

Сообщение Dr_Spritz 17 апр 2013, 07:19

bifidokk писал(а):посмотрите, как я сделал:
viewtopic.php?f=105&t=15247


А я думал Resources.Load() работает аналогично Resources.LoadAssetAtPath() и сразу отказался от этого варианта))

Спасибо! (3A4OT)
Dr_Spritz
UNец
 
Сообщения: 32
Зарегистрирован: 01 апр 2013, 07:24


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

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

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