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)

pax 13.03.2013 16:18

Ответ: Фак по Юнити.
 
Надо передавать не слой, а маску
PHP код:

lay << (int)LayerMask.NameToLayer("JustRayCast"); 


burovalex 13.03.2013 17:24

Ответ: Фак по Юнити.
 
Интересно, тыркался пыркался, еле допёр что это делает ))

Получается LayerMask.NameToLayer("") возвращает нам номер слоя (8-й), а надо использовать получается Бит из возможных 32-х.

Т.е. если надо использовать для рейкаста 3,5,6 слоя то надо отправить int:
в десятичной = 2^3 + 2^5 + 2^6 = 104 (галки это степени)
либо бинарной = ...0000000110100 = 104

т.е.
lay = 1 << (int)LayerMask.NameToLayer("JustRayCast");
lay += 1 << (int)LayerMask.NameToLayer("Default");

равносильно
lay = Mathf.Pow(2,LayerMask.NameToLayer("JustRayCast")) + Mathf.Pow(2,LayerMask.NameToLayer("Default"))

Прям теорема получилась :cool:
Правда запись не упростилась ))
Ну так, для общего развития пойдёт! :)

EvilOkta 13.03.2013 19:07

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

Сообщение от Andvrok (Сообщение 254415)
Можно ли проверить, есть ли какой-либо геймобжект в определенной точке пространства? Если да, то пните меня в нужном направлении, пожалуйста.

еще как вариант установить в эту точку пространства триггер и проверять его пересечение с объектом

burovalex 13.03.2013 22:03

Ответ: Фак по Юнити.
 
Появилось парочка вопросов, подскажите плиз.

Начал искать как на русском текст выводить, нашел чтото, получилось. Перекодировал из notepad++ в UTF-8, хотя говорят что лучше кодировать в UTF-16, но такового не нашлось..
После перекодировки русский появляется только при написании в Notepad++ и в MonoDevelop русский стал закорючками.

Можно както кодировку в самом MonoDevelop'е поменять?
Или какоё-нибудь другой хороший вариант.

И еще, хотел при коллайднутом объекте выводить текст относительно его позиции. Сделал так
PHP код:

Vector3 v3 Camera.main.WorldToScreenPoint(playerHit.transform.position);
        
GUI.TextField(new Rect(v3.xv3.y15050), label); 

Но относительно экрана по Х определяет правильно а по У наоборот как будто. Т.е. когда держишься по центру относительно У - текст в центре, а когда передвигаешь объект относительно У вверх - текст уходит вниз..

pax 14.03.2013 07:17

Ответ: Фак по Юнити.
 
1. Я не использую монодевелоп (пишу в Visual Studio), но в нем можно сохранить с кодировкой, просто нажми файл->сохранить как...
2. v3.y = Screen.height - v3.y;

burovalex 14.03.2013 12:57

Ответ: Фак по Юнити.
 
Не, эт понятно что решение есть, я думал что может не ту функцию использую.
Как то это не правильно, если WorldToScreenPoint должна определять координаты на экране, то никак не (х, height - y) :mda:

pax 14.03.2013 13:01

Ответ: Фак по Юнити.
 
Почему нет? Мышь работает в тех же координатах, как и камера (рект камеры задается аналогично) и в справке про координатную систему написано http://docs.unity3d.com/Documentatio...reenPoint.html .
Цитата:

Screenspace is defined in pixels. The bottom-left of the screen is (0,0); the right-top is (pixelWidth,pixelHeight). The z position is in world units from the camera.

burovalex 14.03.2013 21:53

Ответ: Фак по Юнити.
 
Ну не знаю, я както привык что левый верхний угол экрана, это начало координат. Думал что это стандарт..

Сейчас взялся за GUI, и тут не на все вопросы могу найти ответы.
Разобрался как свои скины вешать, немного разобрался в настройках, но помогите кое в чём

Есть текстура и текст, можно както сделать чтобы текстура растягивалась вместе с текстом, не важно в чем Label, TextArea.

И не могу найти как в скине допустим у TextArea сделать текстуру прозрачной.

И если есть какой-нибудь хорошая (полезная) тема по GUI - очень поможете!

pax 15.03.2013 07:33

Ответ: Фак по Юнити.
 
GUI это достаточно сложная тема, если лезть в ее дебри.

Растягивание: Когда создаешь стиль - надо задать Border для не растягиваемых краев, все что в него не попадает - растягивается. Конечно при условии если ты не задал фиксированный размер элемента управления. Текстура должна быть задана в Normal=>background на сколько я помню.

Текстуру прозрачной делай саму. Либо если хочешь контрол прозрачным сделать? то напиши перед его отрисовкой следующее:
PHP код:

GUI.color = new Color(1,1,1,0.5f); 


burovalex 15.03.2013 17:04

Ответ: Фак по Юнити.
 
Чтото так и не допёр как свой класс создать так, чтобы можно было обращаться к его полям.
Т.е.

PHP код:

public class plantInfoRect
    
{
    public 
Rect commentLabelgrowIcongrowLabel;
    } 

А обращаться потом
PHP код:

plantInfoRect.commentLabel = new Rect...; 


seaman 15.03.2013 17:13

Ответ: Фак по Юнити.
 
Для начала нужно создать сам класс plantInfoRect (если он, конечно, не статический).
Код:

plantInfoRect info = new plantInfoRect();
И уже потом заполнять его поля.

burovalex 15.03.2013 17:35

Ответ: Фак по Юнити.
 
А ничего что я хочу использовать такую структуру :
PHP код:

private class PlantInfo
    
{
    private 
Rect commentLabelgrowIcongrowLabel;
    }  
private 
PlantInfo plantInfoRect;

void Start()
{
plantInfoRect = new PlantInfo();
}

void Update
{
plantInfoRect.commentLabel = new Rect(..);




вместо

PHP код:

enum plantInfo {commentLabelgrowIcon,};
private 
Rect[] plantInfoRect

void Start()
{
plantInfoRect = new Rect[Enum.GetNames(typeof(plantInfo)).Length];
}

void Update
{
plantInfoRect[(int)plantInfo.commentLabel] = new Rect(..);




На производительности и других подводных камнях не отзовётся?

seaman 15.03.2013 17:50

Ответ: Фак по Юнити.
 
Ну только вместо:
private Rect commentLabel, growIcon, growLabel;
нужно
public Rect commentLabel, growIcon, growLabel;

burovalex 15.03.2013 17:59

Ответ: Фак по Юнити.
 
Помогите, не получается обратиться к классу rect.commentLabel
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.commentLabel = new Rect();   //Здесь ошибка
    


Object reference not set to an instance of an object
PlayerController.Start ()

Ссылка на объект не указывает на экземпляр объекта :mda:

burovalex 16.03.2013 15:34

Ответ: Фак по Юнити.
 
Блин, выходные, булка вымерла :(

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

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

pax 18.03.2013 09:58

Ответ: Фак по Юнити.
 
Ну а нафига тебе выделять память сразу под все элементы массива? Вдруг ты используешь всего 1 элемент из десяти? Не забывай что это массив ссылок на экземпляры класса, а не массив значений. Если экземпляра нет, то это null. Все четко и ясно.

А пример с int переменной не катит, это тип значения, а не ссылочный тип ;) потому что int[] myIntArray = new int[100500]; выделит память сразу.

burovalex 19.03.2013 12:54

Ответ: Фак по Юнити.
 
Хотел получить список всех компонентов LOD (ручной скрипт)

написал
allLOD = Object.FindSceneObjectsOfType(typeof(LOD));
но таким образом не могу к нему обратиться, хотя в инспекторе вижу список вытянутых скриптов
т.е. allLOD[i]. не подсвечиваются внутренние переменные.

Подскажите что сделать.
И вообще нормальный ли это вариант, или лучше находить ГаймОбжекты и у них уже вызывать GetComponent<T>()
Но не знаю как найти ГО с определенным компонентом.
Через тэги пока только умею :rolleyes:

seaman 19.03.2013 13:26

Ответ: Фак по Юнити.
 
1. Наверное все же FindObjectsOfType?
2. Опять приведение типов. Смотрите внимательнее мануал. Что возвращает эта функция? Object[]! Естественно в Object нет Ваших переменных. Приведите результат к типу LOD - все будет работать.
Код:

LOD[] allLOD = (LOD[]) FindObjectsOfType(typeof(LOD));

burovalex 19.03.2013 14:13

Ответ: Фак по Юнити.
 
Спасибо Симен!
А FindObjectsOfType будет выбирать объекты только текущей сцены?
Я увидел что есть FindSceneObjectsOfType вот и подумал что она мне нужна )

seaman 19.03.2013 17:15

Ответ: Фак по Юнити.
 
FindSceneObjectsOfType недокументирована, потому я бы не использовал.
Цитата:

будет выбирать объекты только текущей сцены
Только активные объекты. Посему, естественно только текущей сцены.

burovalex 19.03.2013 17:31

Ответ: Фак по Юнити.
 
Сейчас еще наткнулся на такую загвоздку.

Есть скрипт, который собирает все объекты по тэгу и обновляет их.
И не получается удалить объект без Null Reference, т.е. скрипт кричит что объекта уже нету.

Пытался обновить список объектов в OnDestroy(), но получается что я запрашиваю список перед удалением, и соответственно удаляемый объект оказывается в этом списке и приводит к ошибке.

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


/// собирающий скрипт
public static void GetPlantList()
{
allPlant = GameObject.FindGameObjectsWithTag("Plant");
plantCount = allPlant.Length;
}

///скрипт объекта
void OnDestroy()
{
if (GetComponent<LOD>() == null) {LODController.GetLODList();}
}

Т.е. вот так не канает
А еще подскажите, плохо ли что я использую статичные переменные и методы в Собирающем скрипте, при условии что на всю сцену у меня их будет по одному

pax 19.03.2013 17:32

Ответ: Фак по Юнити.
 
сравнить объект с null перед обработкой не пробовал?

PHP код:

foreach(MyObject obj in MyObjects)
{
   if(
obj == null) continue;

   
// тут обработка



burovalex 19.03.2013 17:46

Ответ: Фак по Юнити.
 
Ну такая проверка имеет две стороны медали
С одной стороны так ошибок точно не будет.
С другой стороны лишнее вычисление и не будет ошибок, когда они могут тебе подсказать.

Может есть еще варианты?

pax 19.03.2013 18:11

Ответ: Фак по Юнити.
 
null обработать другим способом нельзя. можешь вместо continue поставить лог, что null попался.

burovalex 19.03.2013 18:26

Ответ: Фак по Юнити.
 
Да не Пакс, не в этом дело, я просто привык делать так чтобы не делать доп. проверок, это только доп. нагрузка для проца.
Ну раз нет других способов, так нет.
Написал не реалтайме чтоб проверял, а только тогда, когда переменная isNeedLODList == true

LODController

PHP код:

using UnityEngine;
using System.Collections;

public class 
LODController MonoBehaviour {
    
    public static 
LOD[] allLOD;
    public static 
int         LODCount;
    public static 
int checkercycleChecker;
    public static 
bool isNeedLODList;
void Start () 
    {
    
GetLODList();
    }
    

void Update () 
    {
    if (
isNeedLODList == false)
        {
        for (
int i=1i<=cycleCheckeri++)    
            {
            if (
checker<LODCount)
                {
                
allLOD[checker].SetLOD();
                
checker++;}
                else {
checker=0;
                }
            }
        }
        else
        {
        
GetLODList();    
        }
    }
    
public static 
void GetLODList()
    {
    
int QL QualitySettings.GetQualityLevel() + 1;
    
allLOD = (LOD[])FindObjectsOfType(typeof(LOD));    
    
LODCount allLOD.Length;
    
cycleChecker + (int)Mathf.FloorToInt((float)LODCount/40f)*QL;
    
    if (
isNeedLODList == true)
        {
        
bool error false;
        foreach (
LOD l in allLOD)
            {
            if (
== null) {error true;}  else {isNeedLODList false;}
            }
            if (
error) {allLOD = (LOD[])FindObjectsOfType(typeof(LOD));}
        }
    }
        





сам LOD

PHP код:

public float     hiPolyDistancemidPolyDistance;
    public 
float     autoFadeDistance;
    private 
float     distance;
    private 
byte     LODLevelcurrentLODLevel;
    private 
Camera     thisCamera;

void Start () 
    {    
    
LODController.GetLODList();
    
LODLevel 0;
    if (
hiPolyPrefab != null) {LODLevel++;}
    if (
midPolyPrefab != null) {LODLevel++;}
    if (
lowPolyPrefab != null) {LODLevel++;}
    
    if (
LODLevel == 1) {gameObject.GetComponent<LOD>().enabled false;}
    if (
LODLevel == 2
        {
        if (
hiPolyPrefab == null) {hiPolyPrefab midPolyPrefabmidPolyPrefab null;}
        if (
midPolyPrefab == null) {midPolyPrefab lowPolyPrefablowPolyPrefab null;}
        }
    
    if (
manualSettings == false)
        {
        
float qual = (float)QualitySettings.GetQualityLevel();
        
hiPolyDistance 4f qual 1.2f;
        
midPolyDistance 30f qual 5f;
        
autoFadeDistance 60f qual 10f;
        }
    
thisCamera Camera.main;
    }
    
void OnDestroy()
    {
//    LODController.GetLODList();
//    print ("LOD destroied");
    
LODController.isNeedLODList true;
    }
    
public 
void SetLOD()
    {
    
distance Vector3.Distance(transform.positionthisCamera.transform.position);
    if (
LODLevel == 2
        {
        if (
currentLODLevel != 1
            {
            if (
distance hiPolyDistance)
                {
currentLODLevel 1;
                
GetComponent<MeshFilter>().sharedMesh hiPolyPrefab.GetComponent<MeshFilter>().sharedMesh
                
renderer.sharedMaterial hiPolyPrefab.renderer.sharedMaterial;
                return;
                }
            }
        if (
currentLODLevel!= 2)
            {
            if (
distancehiPolyDistance)
                {
currentLODLevel =2;
                
GetComponent<MeshFilter>().sharedMesh  midPolyPrefab.GetComponent<MeshFilter>().sharedMesh
                
renderer.sharedMaterial midPolyPrefab.renderer.sharedMaterial;
                return;
                }
            }
        }
    if (
LODLevel == 3
        {
        if (
currentLODLevel != 1
            {
            if (
distance hiPolyDistance)
                {
currentLODLevel 1;
                
GetComponent<MeshFilter>().sharedMesh hiPolyPrefab.GetComponent<MeshFilter>().sharedMesh
                
renderer.sharedMaterial hiPolyPrefab.renderer.sharedMaterial;
                return;
                }
            }
        if (
currentLODLevel!= 2)
            {
            if (
distancehiPolyDistance && distancemidPolyDistance)
                {
currentLODLevel =2;
                
GetComponent<MeshFilter>().sharedMesh  midPolyPrefab.GetComponent<MeshFilter>().sharedMesh
                
renderer.sharedMaterial midPolyPrefab.renderer.sharedMaterial;
                return;
                }
            }
        if (
currentLODLevel != 3
            {
            if (
distance midPolyDistance)
                {
currentLODLevel =3;
                
GetComponent<MeshFilter>().sharedMesh  lowPolyPrefab.GetComponent<MeshFilter>().sharedMesh
                
renderer.sharedMaterial lowPolyPrefab.renderer.sharedMaterial;
                return;
                }
            }
        }
        if (
distance autoFadeDistance) {renderer.enabled false;} else {renderer.enabled true;}
    }



Хотя может я слишком помешан на оптимизации...

Критику буду рад слышать.
Это мой LOD скрипт для free версии :)

burovalex 20.03.2013 18:16

Ответ: Фак по Юнити.
 
Блин, чтото с гуи парюсб парюсь. И не получается.
Подскажите как можно сделать область, в которой размер содержимого менялся в зависимости от размера области.
Пробовал Areа - за её пределы спокойно выходят рисунки.

Мне вообще это надо для отображения рисунков одинакового размера, при условии что сама текстура может быть разными размерами.
Подскажите плиз как ограничить размер текстуры, желательно через Rect параметр для скрипта.

pax 20.03.2013 18:19

Ответ: Фак по Юнити.
 
Немного непонятен вопрос, вот это подойдет?
http://docs.unity3d.com/Documentatio...TexCoords.html

burovalex 20.03.2013 21:31

Ответ: Фак по Юнити.
 
Да Пакс, это то, только проблема в том что я использовал GUILayout, в котором объекты автоматом располагаются.
И в этом Layout пытался картинку вставить, с custom style и настроенным width height, но както коряво смотрится.

Посоветуйте, стоит ли пользоваться GUILayout? Либо чтото другое.
И в справке не могу найти (раньше натыкался), можно создать какуюто типо Area, в которой координаты свои, т.е. внутренние элементы дочерние с локальными координатами. Не знаете что за элемент?

burovalex 20.03.2013 22:01

Ответ: Фак по Юнити.
 
Мне ГуиЛайоут нравится только тем что не надо расчитывать размеры каждого элемента

pax 21.03.2013 04:21

Ответ: Фак по Юнити.
 
Объясни предметно с рисунками что ты хочешь сделать, иначе хз как помочь. Я не понял проблемы. Но одно могу сказать точно - GUI в GUILayout не всегда можно использовать нормально, особенно простое рисование текстуры.

burovalex 21.03.2013 11:49

Ответ: Фак по Юнити.
 
Понял Пакс спасибо.
Не заморачивайся. Просто в GUILayout удобно что не надо координаты просчитывать. А так как моя панелька должна динамически менять положение, приходилось бы каждый раз просчитывать новые координаты каждого элемента.

Нашёл то, что мне подойдёт. GUI.BeginGroup(); GUI.EndGroup(); а внутри группы координаты 0,0 является левый верхний угол группы.

pax 21.03.2013 12:25

Ответ: Фак по Юнити.
 
GUILayout.Area тоже задается ректом и внутри нее относительные координаты. В нем можно текстуру рисовать с помощью GUILayout.Label например. В общем если поставишь нормально задачу - смогу что-то посоветовать.

Lowlet 23.03.2013 18:45

Ответ: Фак по Юнити.
 
Pax, не встречал ошибку вебплеера Uncaught ReferenceError: unity is not defined, на странице Вк?

pax 23.03.2013 19:17

Ответ: Фак по Юнити.
 
Использую стандартный код из справки, таких ошибок давно не видел.

burovalex 23.03.2013 22:06

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

Да и если есть хороший тутор по такой теме и вообще джоинтов буду очень благодарен (ограничен в интернете)

pax 24.03.2013 12:33

Ответ: Фак по Юнити.
 
GameObject=>Create Other=>Ragdall
http://docs.unity3d.com/Documentatio...ollWizard.html

burovalex 24.03.2013 15:28

Ответ: Фак по Юнити.
 
Я это смотрел, только так и не понял что куда надо вставлять.

Не понятно что в root надо вставлять
В остальные head, arm, .. надо вставлять кости? Точнее их трансформации?

Тутора Не видео - не нашёл. Видео на вахте не потянет.


А еще пока не знаю как рэгдоллы собирать, начал делать анимацию воды с движением вертексов.
Возникло несколько вопросов

Как по тутору сделал так, но хотелось бы узнать можно ли не перебирая все точки, взять определённую и трансформировать?
PHP код:

for (int i=0i<vertexCounti++)
        {
        
vertex[i] = new Vector3(vertex[i].xwaterLevel+Mathf.Sin(Time.time*100), vertex[i].z);        
        }
    
GetComponent<MeshFilter>().sharedMesh.vertices vertex

И не знаю как в материале, прицепленном к мешу, сделать движение текстуры по U или V

pax 24.03.2013 16:45

Ответ: Фак по Юнити.
 
На сколько я помню в этом туторе был пример настройки рагдола.

burovalex 24.03.2013 17:33

Ответ: Фак по Юнити.
 
Спасибо Пакс, помню с тобой обсуждал, sharedMesh, который помогал не терять меш в префабе.
Но тут начал менять вертексы в sharedMesh и он мне портит меш в реале, причем без возврата, что не так?

PHP код:

public class WaterAnim MonoBehaviour {
    public 
Vector3[] vertex;
    public 
int vertexCount;
    public 
float waterLevelwaveHeight;
    
void Start () {
    
vertex GetComponent<MeshFilter>().sharedMesh.vertices;
    
vertexCount GetComponent<MeshFilter>().sharedMesh.vertexCount;        
    }
    
void Update () 
    {
    for (
int i=0i<vertexCounti++)
        {
        
vertex[i] = new Vector3(vertex[i].xvertex[i].yMathf.Sin(Time.time)*waveHeight);        
        }
    
GetComponent<MeshFilter>().sharedMesh.vertices vertex
    }



pax 24.03.2013 17:37

Ответ: Фак по Юнити.
 
Шаред меш это ссылка на ресурс, т.е. не копия ресурса а сам ресурс. Если ты хочешь изменить экземпляр, то используй свойство mesh либо Instantiate для меша, копию которого хочешь сделать, потом назначай его на sharedMesh.

Если это импортированная модель, то ты можешь сделать ей реимпорт чтобы исправить меш.

burovalex 25.03.2013 11:43

Ответ: Фак по Юнити.
 
Пытался узнать сколько времени тратится на скрипт, но не получилось
PHP код:

void Update () 
    {
    
float t1 Time.time;
    
Vector3 v3;
    for (
int i=0i<10000000i++)
        {
        
v3 = new Vector3(i,i,i);
        }
    
time Time.time t1;
    }


Но выдаёт ноль. Хотя в статистике видно что хавает гдето 40 мс.

pax 25.03.2013 12:14

Ответ: Фак по Юнити.
 
используй Time.realtimeSinceStartup

burovalex 25.03.2013 14:19

Ответ: Фак по Юнити.
 
Вложений: 2
Нифига се точность, показывает время до 1 / 10000 секунды.

По поводу воды еще вопрос возник. Как в юнити смешивать несколько текстур. Я хотел на воду наложить парочку текстур полупрозрачных и прикрутить карту блеска.
Есть ли готовые варианты решения задачи?

И еще повылазили артефакты сквозь волны из-за прозрачности, как можно отключить у материала culling
Если только через шейдер, то можно гдето достать из Юнити стандартные шейдеры типа Diffuse, чтобы заточить под себя?

Или надо z-буффер на воду отрубать? Если да, то как?

burovalex 29.03.2013 08:43

Ответ: Фак по Юнити.
 
Что, никто не поможет?

pax 29.03.2013 09:17

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

Сообщение от burovalex (Сообщение 255962)
Что, никто не поможет?

Ты изменил сообщение не сразу добавив вопрос, поэтому никто не заметил его.

С прозрачными объектами сложной формы всегда сложно, может им не нужна прозрачность?

http://unity3d.com/unity/download/archive
справа шейдеры

burovalex 29.03.2013 10:15

Ответ: Фак по Юнити.
 
Ну это ж вода, хотелось бы хоть немного альфы.
А про шейдеры не понял, в Юнити же вроде точно такие же..
Если нет, то какой может подойти?

pax 29.03.2013 10:18

Ответ: Фак по Юнити.
 
Это те же шейдеры, ты просил оригинальные.

Меняй любой, называй по своему и это новый шейдер.
чтобы выключить кулинг - Cull Off
http://docs.unity3d.com/Documentatio...s/SL-Pass.html

burovalex 29.03.2013 10:20

Ответ: Фак по Юнити.
 
А понял, спасибо Андрюх!
Ты случайно не в Нефтеюганске живёшь, я бы проставился ))

burovalex 02.04.2013 22:47

Ответ: Фак по Юнити.
 
Всем доброго времени суток. Наконец то разобрался с ragdoll'ами и понял что это подходит только для человекоподобных существ, у которых должны быть ноги, колени, руки локти и тд.

А я думал что можно выбрать кости: к примеру голова, спина и любая нога. И получиться червяк.. )

Но юнити требует все вышеописанные кости.
Можно ли попустим сделать паука рэгдолом(я подразумеваю физический труп) без ручного прописания всех джоинтов?
Или все таки придётся для каждой лапы прописывать связь и тд?
И каждую кость делать Rigidbody?


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

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