forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

RBK 16.03.2013 16:31

Ответ: Фак по Юнити.
 
Я C# еще учу, но попробую помочь.
PHP код:

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();
    } 


burovalex 16.03.2013 18:12

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

Спасибо РБК!

burovalex 17.03.2013 14:54

Ответ: Фак по Юнити.
 
Ребят, помогите!
Не могу сообразить как достать значение 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. ??????????????;
}
}

pax 17.03.2013 14:57

Ответ: Фак по Юнити.
 
PHP код:

temp = (int)action


burovalex 17.03.2013 15:42

Ответ: Фак по Юнити.
 
Мне стыдно!
Видимо вредно с утра до вечера в юнити торчать )

Кстати, вопрос по теме возник, а можно както enum создавать сразу с типом int?

pax 17.03.2013 16:33

Ответ: Фак по Юнити.
 
Он по умолчанию типа int. Ему можно задать другой целочисленный тип:
PHP код:

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

burovalex 17.03.2013 17:32

Ответ: Фак по Юнити.
 
Вот еще вопрос меня такой мучает.

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

Стоит ли в таком случае пользоваться байтом или наоборот хуже только делаю?

pax 17.03.2013 17:55

Ответ: Фак по Юнити.
 
Имхо юзай int. Я перевожу в меньший если по сети надо передать и только.

burovalex 17.03.2013 21:52

Ответ: Фак по Юнити.
 
Помогите плиз!
Ничего понять не могу, ошибка появляется, а если в инспекторе выбрать ошибочный скрипт прямо в реалтайме - ошибка перестаёт появляться. :4to:
NullReferenceException: Object reference not set to an instance of an object

части кода:

PHP код:

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
                
}
            }



Закомментировал ошибочные строки, и ошибка появилась в том месте кода, где обнуляю поля:

PHP код:

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

Похоже как будто не инициализировал, но
PHP код:

actions = new InfoActions[actionsCount]; 


seaman 17.03.2013 22:23

Ответ: Фак по Юнити.
 
Цитата:

Похоже как будто не инициализировал, но
И при этом каждое значение в массиве == null. Чтобы не было нужно инициализировать каждое в цикле.

burovalex 18.03.2013 07:18

Ответ: Фак по Юнити.
 
Я тогда только одно не понимаю - почему переменные инициализируются после отображения в инспекторе ошибочного скрипта?

pax 18.03.2013 07:42

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

В твоем конкретном случае создается пустой массив, что при переборе соответственно не вызывает исключений.

burovalex 18.03.2013 08:00

Ответ: Фак по Юнити.
 
всё равно ошибка..
PHP код:

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



pax 18.03.2013 09:10

Ответ: Фак по Юнити.
 
Цитата:

Сообщение от burovalex (Сообщение 255126)
всё равно ошибка..

PHP код:

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;  


Выделение памяти под массив не значит что память выделена для всех его элементов.

burovalex 18.03.2013 09:48

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

Т.е.
PHP код:

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;        
        


Но это както глупо! Инициализировал переменную, но возможно не все..
Это равносильно
PHP код:

public int a;

10;
if (
!= 10) {10}; 

ИМХО, из-за не знания технологии похоже на бред.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot