|
Unity Мультиплатформенный инструмент для разработки игр |
16.03.2013, 16:31
|
#976
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: Фак по Юнити.
Я C# еще учу, но попробую помочь.
public class PlantInfoClass { public bool enable; public Vector3 position; public class PlantInfoRect {public Rect commentLabel, growIcon, growLabel;} public PlantInfoRect rect; } public PlantInfoClass plantInfo; void Start () { plantInfo = new PlantInfoClass(); plantInfo.rect = new PlantInfoRect(); //добавить plantInfo.rect.commentLabel = new Rect(); }
__________________
AMD Sempron(tm) 1.41Ггц, 1024МБ ОЗУ, GeForce 6200 128МБ, WinXP SP3.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.03.2013, 18:12
|
#977
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Вот я нубяра, объявить объявил, а не инициализировал.
Старые блитцовские привычки - объявил, пользуйся.
Спасибо РБК!
__________________
|
(Offline)
|
|
17.03.2013, 14:54
|
#978
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Ребят, помогите!
Не могу сообразить как достать значение enum
Т.е. у меня есть еНам public enum ActionType{pickUp=1, pull, snake}
и есть переменная с типом ActionType public ActionType action;
А как потом достать значение из action не пойму
При условии что я не знаю что хранится в action.
using UnityEngine;
using System.Collections;
public class ActionContainer : MonoBehaviour {
public enum ActionType{pickUp=1, pull, snake}
public ActionType action;
public int temp;
void Start()
{
action = ActionType.pickUp;
temp = action. ??????????????;
}
}
__________________
|
(Offline)
|
|
17.03.2013, 14:57
|
#979
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
|
(Offline)
|
|
17.03.2013, 15:42
|
#980
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Мне стыдно!
Видимо вредно с утра до вечера в юнити торчать )
Кстати, вопрос по теме возник, а можно както enum создавать сразу с типом int?
__________________
|
(Offline)
|
|
17.03.2013, 16:33
|
#981
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Он по умолчанию типа int. Ему можно задать другой целочисленный тип:
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
http://msdn.microsoft.com/ru-ru/libr...(v=vs.90).aspx
Операторы неявного преобразования типов можно делать только для классов и структур. Не для энамов.
http://stackoverflow.com/questions/2...-of-enums-in-c
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.03.2013, 17:32
|
#982
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Вот еще вопрос меня такой мучает.
У меня есть переменные в которых не бывает больших значений.
Подумал использовать тип byte, их намного быстрее можно посчитать и весит мало.
Но с другой стороны при вычислениях в других типах приходится переводить byte в int.
Стоит ли в таком случае пользоваться байтом или наоборот хуже только делаю?
__________________
|
(Offline)
|
|
17.03.2013, 17:55
|
#983
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Имхо юзай int. Я перевожу в меньший если по сети надо передать и только.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.03.2013, 21:52
|
#984
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Помогите плиз!
Ничего понять не могу, ошибка появляется, а если в инспекторе выбрать ошибочный скрипт прямо в реалтайме - ошибка перестаёт появляться.
NullReferenceException: Object reference not set to an instance of an object
части кода:
public class PlayerController : MonoBehaviour {
private Vector3 plantInfoPosition; public bool showPlantInfo; private float plantInfoEffect; public GUISkin plantInfoSkin; public class PlantInfoClass { public string label; public float growPercent; public bool enable; public Vector3 position; } public PlantInfoClass plantInfo; //[System.Serializable] public class InfoActions {public int type; public float resistance, needStamina; public string label; public GUITexture icon;} public InfoActions[] actions; public int actionsShowCount; public int actionsCount;
void Start () { plantInfo = new PlantInfoClass(); plantInfo.rect = new PlantInfoClass.PlantInfoRect(); plantInfo.rect.area = new Rect(); plantInfo.color = new PlantInfoClass.PlantInfoColor(); plantInfo.color.commentLabel = Color.white; plantInfo.color.growIcon = Color.white; plantInfo.color.growPercent = Color.white; actions = new InfoActions[actionsCount]; }
void Update () { if (playerHit.collider.GetComponent<ActionContainer>() != null) { ActionContainer ac = playerHit.collider.GetComponent<ActionContainer>(); int len = ac.actions.Length; tempInt = len; for (int i=0; i<len; i++) { actions[i].type = (int)ac.actions[i].action; //Error actions[i].resistance = ac.actions[i].resistance; //Error actions[i].needStamina = ac.actions[i].needStamina; //Error //actions[i].label = Database.actionLabel[actions[i].type]; //Error } } }
Закомментировал ошибочные строки, и ошибка появилась в том месте кода, где обнуляю поля:
for (int i=0; i<actionsCount; i++) {actions[i].type = 0; actions[i].resistance = 0f; actions[i].needStamina = 0f;}
Ошибка та же NullReferenceException: Object reference not set to an instance of an object
Похоже как будто не инициализировал, но
actions = new InfoActions[actionsCount];
__________________
|
(Offline)
|
|
17.03.2013, 22:23
|
#985
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: Фак по Юнити.
Похоже как будто не инициализировал, но
|
И при этом каждое значение в массиве == null. Чтобы не было нужно инициализировать каждое в цикле.
|
(Offline)
|
|
18.03.2013, 07:18
|
#986
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Я тогда только одно не понимаю - почему переменные инициализируются после отображения в инспекторе ошибочного скрипта?
__________________
|
(Offline)
|
|
18.03.2013, 07:42
|
#987
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Инспектор все null переменные создает пустыми: массивы с нулевой длиной, сериализуемые объекты - экземплярами с дефолтными данными. Иначе их нельзя было бы редактировать. Только объекты движка остаются null - что означает - нет ссылки на какой-то объект типа материала или меша.
В твоем конкретном случае создается пустой массив, что при переборе соответственно не вызывает исключений.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.03.2013, 08:00
|
#988
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
всё равно ошибка..
actions = new InfoActions[actionsCount]; public class InfoActions {public int type; public float resistance, needStamina;} public InfoActions[] actions;
actions = new InfoActions[actionsCount]; for (int i=0; i<actionsCount; i++) { actions[i].type = new int(); //NullReferenceException: Object reference not set to an instance of an object }
__________________
|
(Offline)
|
|
18.03.2013, 09:10
|
#989
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Сообщение от burovalex
всё равно ошибка..
|
actions = new InfoActions[actionsCount]; public class InfoActions {public int type; public float resistance, needStamina;} public InfoActions[] actions;
actions = new InfoActions[actionsCount]; for (int i=0; i<actionsCount; i++) { if(actions[i] == null) actions[i] = new InfoActions(); actions[i].type = 1; }
Выделение памяти под массив не значит что память выделена для всех его элементов.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.03.2013, 09:48
|
#990
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Фак по Юнити.
Спасибо Пакс!
Нормально работает даже без иниц-ии внутренних переменных
Т.е.
actions = new InfoActions[actionsCount]; for (int i=0; i<actionsCount; i++) { if(actions[i] == null) actions[i] = new InfoActions(); //actions[i].type = new int(); //actions[i].resistance = 0f; //actions[i].needStamina = 0f; }
Но это както глупо! Инициализировал переменную, но возможно не все..
Это равносильно
public int a;
a = 10; if (a != 10) {a = 10};
ИМХО, из-за не знания технологии похоже на бред.
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:57.
|