Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity

Unity Мультиплатформенный инструмент для разработки игр

Ответ
 
Опции темы
Старый 16.03.2013, 16:31   #976
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: Фак по Юнити.

Я C# еще учу, но попробую помочь.
public class PlantInfoClass
        
{
        public 
bool enable;    
        public 
Vector3 position;
        public class 
PlantInfoRect {public Rect commentLabelgrowIcongrowLabel;}
        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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (16.03.2013)
Старый 16.03.2013, 18:12   #977
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Фак по Юнити.

Вот я нубяра, объявить объявил, а не инициализировал.
Старые блитцовские привычки - объявил, пользуйся.

Спасибо РБК!
__________________
(Offline)
 
Ответить с цитированием
Старый 17.03.2013, 14:54   #978
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 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
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Фак по Юнити.

temp = (int)action
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 17.03.2013, 15:42   #980
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Фак по Юнити.

Мне стыдно!
Видимо вредно с утра до вечера в юнити торчать )

Кстати, вопрос по теме возник, а можно както enum создавать сразу с типом int?
__________________
(Offline)
 
Ответить с цитированием
Старый 17.03.2013, 16:33   #981
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Фак по Юнити.

Он по умолчанию типа int. Ему можно задать другой целочисленный тип:
enum Days byte {Sat=1SunMonTueWedThuFri}; 
http://msdn.microsoft.com/ru-ru/libr...(v=vs.90).aspx

Операторы неявного преобразования типов можно делать только для классов и структур. Не для энамов.

http://stackoverflow.com/questions/2...-of-enums-in-c
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (17.03.2013)
Старый 17.03.2013, 17:32   #982
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Фак по Юнити.

Вот еще вопрос меня такой мучает.

У меня есть переменные в которых не бывает больших значений.
Подумал использовать тип byte, их намного быстрее можно посчитать и весит мало.
Но с другой стороны при вычислениях в других типах приходится переводить byte в int.

Стоит ли в таком случае пользоваться байтом или наоборот хуже только делаю?
__________________
(Offline)
 
Ответить с цитированием
Старый 17.03.2013, 17:55   #983
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Фак по Юнити.

Имхо юзай int. Я перевожу в меньший если по сети надо передать и только.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (17.03.2013)
Старый 17.03.2013, 21:52   #984
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 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 resistanceneedStamina; 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=0i<leni++)
                {
                
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=0i<actionsCounti++) 
  {
actions[i].type 0actions[i].resistance 0factions[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
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Фак по Юнити.

Похоже как будто не инициализировал, но
И при этом каждое значение в массиве == null. Чтобы не было нужно инициализировать каждое в цикле.
(Offline)
 
Ответить с цитированием
Старый 18.03.2013, 07:18   #986
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Фак по Юнити.

Я тогда только одно не понимаю - почему переменные инициализируются после отображения в инспекторе ошибочного скрипта?
__________________
(Offline)
 
Ответить с цитированием
Старый 18.03.2013, 07:42   #987
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Фак по Юнити.

Инспектор все null переменные создает пустыми: массивы с нулевой длиной, сериализуемые объекты - экземплярами с дефолтными данными. Иначе их нельзя было бы редактировать. Только объекты движка остаются null - что означает - нет ссылки на какой-то объект типа материала или меша.

В твоем конкретном случае создается пустой массив, что при переборе соответственно не вызывает исключений.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (18.03.2013)
Старый 18.03.2013, 08:00   #988
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Фак по Юнити.

всё равно ошибка..
actions = new InfoActions[actionsCount];
public class 
InfoActions {public int type; public float resistanceneedStamina;}
        public 
InfoActions[] actions;


actions = new InfoActions[actionsCount];
    for (
int i=0i<actionsCounti++)
        {
        
actions[i].type = new int();  //NullReferenceException: Object reference not set to an instance of an object

__________________
(Offline)
 
Ответить с цитированием
Старый 18.03.2013, 09:10   #989
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Фак по Юнити.

Сообщение от burovalex Посмотреть сообщение
всё равно ошибка..
actions = new InfoActions[actionsCount];
public class 
InfoActions {public int type; public float resistanceneedStamina;}
        public 
InfoActions[] actions;


actions = new InfoActions[actionsCount];
    for (
int i=0i<actionsCounti++)
        {
        if(
actions[i] == nullactions[i] = new InfoActions();
        
actions[i].type 1;  

Выделение памяти под массив не значит что память выделена для всех его элементов.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (18.03.2013)
Старый 18.03.2013, 09:48   #990
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Фак по Юнити.

Спасибо Пакс!
Нормально работает даже без иниц-ии внутренних переменных

Т.е.
actions = new InfoActions[actionsCount];
    for (
int i=0i<actionsCounti++)
        {
        if(
actions[i] == nullactions[i] = new InfoActions();
        
//actions[i].type = new int();
        //actions[i].resistance = 0f;
        //actions[i].needStamina = 0f;        
        

Но это както глупо! Инициализировал переменную, но возможно не все..
Это равносильно
public int a;

10;
if (
!= 10) {10}; 
ИМХО, из-за не знания технологии похоже на бред.
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:45.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com