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)

burovalex 27.06.2013 08:10

Ответ: Фак по Юнити.
 
Блин, я наверное опять где-то туплю...
SetInt SetFloat .. я так и не нашел.
Нашел Insert через него тоже Null Reference

Для полной картины выкидываю части кода (части чтоб в лишнем не копашиться)

Я использую несколько скриптов, один из них основной, который достаёт нужные переменные из остальных
основной скрипт

OnGUI ()
{
GUILayout.BeginHorizontal();
NewProfileName = GUILayout.TextField(NewProfileName, (int)20);
if (GUILayout.Button(DB.text.create))
{
Profile.AllProfiles[0].name.Insert(0,NewProfileName);
};
GUILayout.EndHorizontal();
}

скрипт профиля

public class Profile : MonoBehaviour {

[Serializable]
public class _Profile
{
public string name;
public int RAM, HDD, rankRAM, rankHDD;
public DateTime DateTimeBeginHDD;
}

public static _Profile[] AllProfiles;

void Start ()
{
AllProfiles = new _Profile[2];
}

cahekp 27.06.2013 11:33

Ответ: Фак по Юнити.
 
Причем тут Insert?
Insert - это вставить в строку какую-то подстроку с определенной позиции.
Вот это:
Profile.AllProfiles[0].name.Insert(0,NewProfileName);
всё-равно, что и вот это:
Profile.AllProfiles[0].name = NewProfileName;

Это никаким боком не относится к сохранению и загрузке!

Чтобы была возможность сохранять и загружать профили, пиши, грубо говоря, так:
Код:

public class Profile : MonoBehaviour {

[Serializable]
public class _Profile
{
public string name;
public int RAM, HDD, rankRAM, rankHDD;
public DateTime DateTimeBeginHDD;
}

public static _Profile[] AllProfiles;

void Start ()
{
AllProfiles = new _Profile[2];
}

public void Save() {
 PlayerPrefs.SetInt("CountProfiles", AllProfiles.Length);

 for (int i=0; i<AllProfiles.Length; i++) {
  PlayerPrefs.SetString(i+"_name", AllProfiles[i].name);
  PlayerPrefs.SetInt(i+"_RAM", AllProfiles[i].RAM);
  // И так далее по списку...
 }
}

public void Load() {
 AllProfiles = new _Profile[PlayerPrefs.GetInt("CountProfiles")];

 for (int i=0; i<AllProfiles.Length; i++) {
  AllProfiles[i].name = PlayerPrefs.GetString(i+"_name");
  AllProfiles[i].RAM = PlayerPrefs.GetInt(i+"_RAM");
  // И так далее по списку...
 }
}

После этого можешь использовать методы Load и Save для загрузки и сохранения состояний всех профилей одновременно.

burovalex 27.06.2013 16:05

Ответ: Фак по Юнити.
 
Вложений: 1
Мужики выручайте - скоро мозг взорвётся
Вроде ничего такого не делаю...

Вызываю в ГУИ фунцию (временно сделал не статикой, чтобы видеть что с данными):
PHP код:

GUILayout.BeginHorizontal();
            
NewProfileName GUILayout.TextField(NewProfileName, (int)20);
            if (
GUILayout.Button(DB.text.create)) 
                {
                
GetComponent<Profile>().CreateNewProfile (NewProfileName);
                };
        
GUILayout.EndHorizontal(); 

А вот в этом скрипте нулл хоть убейся:

PHP код:

using System.Collections.Generic;
using System;

public class 
Profile MonoBehaviour {
    
    [
System.Serializable]
    public class 
_Profile
        
{
        public 
string name;
        public 
int RAMHDDrankRAMrankHDD;
        public 
DateTime DateTimeBeginHDD;
        }
    
    public 
_Profile[] AllProfiles;
    public 
_Profile CurrentProfile;
    public 
int countProfiles;
    
void Start ()
    {

    }
    
void Update () 
    {

    }
    
public 
void CreateNewProfile (string NPN)
    {
    
countProfiles++;
    
AllProfiles = new _Profile[countProfiles];
        
    for (
int i=0i<countProfilesi++)
        {
        print (
i);
        
AllProfiles[i].name NPN;        
        }
    }



Хотя по скрину видно что в массиве Есть новый элемент! :wallbash:

seaman 27.06.2013 16:25

Ответ: Фак по Юнити.
 
AllProfiles[i] не определен. выделить память под массив - не значит определить все его элементы.

burovalex 27.06.2013 17:42

Ответ: Фак по Юнити.
 
СПАСИБО!
Я уже не первый раз так туплю. Пакс мне уже объяснял. Всё привыкнуть не могу. В старых языках один раз объявил и не перевыделишь уже память..

Т.е. получается AllProfiles[i] = new _Profile[10] - выделяет память под 10 элементов данного типа.
а AllProfile[1] - это уже определение?

seaman 27.06.2013 22:08

Ответ: Фак по Юнити.
 
AllProfile[1] = new _Profile();
Вот это определение.
Т.е. нужно пробежать циклом по всем элементам массива и определить их.
PS^ В Вашем случае было бы проще вместо
public class _Profile
использовать
public struct _Profile
если бы не нужна была сериализация. С одной стороны структуры по умолчанию определяются дефолтными значениями - не нужен цикл. С другой стороны структуры в Юнити не нормально сериализуются.

burovalex 27.06.2013 22:20

Ответ: Фак по Юнити.
 
Еще есть такой вопрос..

Предисловие:
Еще изучая блитц, придумал (может велосипед, но не слышал) как на разные 3д модели использовать различные эффекты, например поднимая предмет он плавно исчезает, подпрыгивает и тд.
И чтобы не заморачиваться с задержкой для эффекта, буфером для действия и т.д. - объект сразу оказывается в инвентаре, меш копируется в скрипт где он анимируется, а оригинал удаляется.

Вопросы:
Нормальный ли такой метод?
И главное, получится ли такой метод использовать в 2Д??

Т.е. нажал на кнопку и в этот момент скопировал текстуру кнопки с надписями рисунками координатами.

burovalex 28.06.2013 10:14

Ответ: Фак по Юнити.
 
Спасибо!
Когда я отвечал, ты как раз писал, не увидел ответа.
На счет структур вообще полезно. А сериализацией я не пользуюсь, даже не знаю для чего она. Просто с ней показывает массив в инспекторе :-)
А так вроде сериализация позволяет сохранять сцену, типа сохранения игры?

cahekp 28.06.2013 13:04

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

А так вроде сериализация позволяет сохранять сцену, типа сохранения игры?
Ну... Она может использоваться в том числе и для этого. Сериализация - это преобразование объекта в поток байтов. А что с ним дальше делать - это уже ты решаешь. Хочешь - сохраняй в файл в виде бинарника, хочешь - в виде XML, хочешь - передавай по сети, закидывай в базу и т.д.

Имхо, странно ты как-то начал работать с сериализацией, даже не изучив ее.

Вот неплохая статья про сериализацию: http://brain-sharper.blogspot.ru/2012/02/net.html
Прочти. Думаю, многое станет понятно.

burovalex 29.06.2013 10:12

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

Сообщение от burovalex (Сообщение 262161)
Еще есть такой вопрос..

Предисловие:
Еще изучая блитц, придумал (может велосипед, но не слышал) как на разные 3д модели использовать различные эффекты, например поднимая предмет он плавно исчезает, подпрыгивает и тд.
И чтобы не заморачиваться с задержкой для эффекта, буфером для действия и т.д. - объект сразу оказывается в инвентаре, меш копируется в скрипт где он анимируется, а оригинал удаляется.

Вопросы:
Нормальный ли такой метод?
И главное, получится ли такой метод использовать в 2Д??

Т.е. нажал на кнопку и в этот момент скопировал текстуру кнопки с надписями рисунками координатами. А дальше копией манипулировать

А про мой подход что скажете? :SOS:

Спасибо! Ссылку сохранил..
PS: ..но для себя усвоил что лучше разбираться с текущими вопросами по проекту, чем хвататься за всё.

Andvrok 10.07.2013 00:38

Ответ: Фак по Юнити.
 
Как определить, обьекты столкнулись на низкой скорости, или с разгона?

pax 10.07.2013 07:34

Ответ: Фак по Юнити.
 
Тут есть пример: http://docs.unity3d.com/Documentatio...sionEnter.html

Andvrok 10.07.2013 22:58

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

Сообщение от pax (Сообщение 263114)

Я правильно понимаю, что через велосити можно узнать и скорость просто движущегося ригидбоди? Через rigidbody.velocity?

pax 10.07.2013 23:56

Ответ: Фак по Юнити.
 
Правильно

Andvrok 07.08.2013 00:27

Ответ: Фак по Юнити.
 
Вопрос, конечно, ламерский, но как реализовать разный угол отскока ригидбоди в одной и той же ситуации? Чтобы добавить непредсказуемости кое-какой. В качестве ригидбоди выступает сфера, колизиться будет об боксы.


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

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