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)

Andvrok 13.08.2010 02:44

Ответ: Фак по Юнити.
 
Так нет раздела проектов на юнити... :(

den 13.08.2010 13:32

Ответ: Фак по Юнити.
 
Вопрос: имеится ГО покрытый текстурой (стена например), С ней соприкоснулся другой ГО (ракета например). Координаты соприклсновения получить, можно, это ясно. Но как в этих координатах наложить маленькую текстурка на стену?:dontknow: (короче как след от пули)

Illidan 13.08.2010 13:40

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

den 13.08.2010 13:48

Ответ: Фак по Юнити.
 
В фпс туторе не нашёл. Там вообще этого нету.
Деталь с текстурой - это не выход - мне надо чтоб прям текстура налаживалась вторым слоем.

Nuprahtor 13.08.2010 13:56

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

Деталь с текстурой - это не выход
Так ведь вроде всегда декалями такие эффекты делают.
Вот тут отличные декали, но они платные. Просто демонстрация того, что можно сделать.
Update:
Полезная ссылочка - здесь

Illidan 13.08.2010 14:26

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

Сообщение от Den (Сообщение 158220)
В фпс туторе не нашёл. Там вообще этого нету.
Деталь с текстурой - это не выход - мне надо чтоб прям текстура налаживалась вторым слоем.

плохо смотрел, там про взрывы тажа технология. ну если декали неустраивают, то есть чрезжопный метод с рисованием в текстуру^^. Накладываешь на второй слой текстуру по типу лайтмапы с альфаканалом.
потом вычисляешь координаты УВ куда попала пуля и рисуешь туда картинку следа. Всё как в блицу.
ПС.Надеюсь теперь понятно что декали лучше подходят?

pax 13.08.2010 14:28

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

Сообщение от Andvrok (Сообщение 158194)
Так нет раздела проектов на юнити... :(

Будет пару проектов, будет вам раздел, я админа попрошу.

pax 13.08.2010 14:31

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

Сообщение от Den (Сообщение 158220)
Деталь с текстурой

:4to:

Хоть за ошибками следите ;)

А на счет рисования в тексутуру - это маразм для этой задачи.

Nuprahtor 13.08.2010 14:33

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

плохо смотрел, там про взрывы тажа технология. ну если декали неустраивают, то есть чрезжопный метод с рисованием в текстуру^^. Накладываешь на второй слой текстуру по типу лайтмапы с альфаканалом.
потом вычисляешь координаты УВ куда попала пуля и рисуешь туда картинку следа. Всё как в блицу.
ПС.Надеюсь теперь понятно что декали лучше подходят?
Проблема в том, что одна декаль += 1 DrawCall, и чтобы декали работали нормально, двумя строчками кода не обойтись.

den 13.08.2010 14:34

Ответ: Фак по Юнити.
 
Ещё вопросик: в настройках я выбрал чтоб скрипты открывались в MSVS (вижуал студио), нажимаю открыть C# скрипт, юнити пишет типо щас откроет, подождите 5 секунд. Но открывается родной редактор! В чём дело?

pax 13.08.2010 14:36

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

Сообщение от Den (Сообщение 158229)
Ещё вопросик: в настройках я выбрал чтоб скрипты открывались в MSVS (вижуал студио), нажимаю открыть C# скрипт, юнити пишет типо щас откроет, подождите 5 секунд. Но открывается родной редактор! В чём дело?

У меня такое иногда бывает. Глюки :pardon:. Я обычно повторно по этому файлу щелкаю. И открывается студия.

Illidan 13.08.2010 14:36

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

Сообщение от Nuprahtor (Сообщение 158228)
Проблема в том, что одна декаль += 1 DrawCall, и чтобы декали работали нормально, двумя строчками кода не обойтись.

ну не двумя конечно, придется атачить все в один мешь. Функции, полюбому, должны быть. ну или накрайняк самому написать можно.
Всё как в блицу)))

den 13.08.2010 14:43

Ответ: Фак по Юнити.
 
Вложений: 1
Цитата:

У меня такое иногда бывает. Глюки . Я обычно повторно по этому файлу щелкаю. И открывается студия.
Не, нажимал раз 30 - всё равно родной открывается.
Вложение 10979ведб так должно быть?

pax 13.08.2010 15:15

Ответ: Фак по Юнити.
 
Ну значит словил ХОРОШИЙ глюк ;)
В папке с проектом юнити создается *.sln файл, который можно студией открыть если уш так не получается ;)
После добавления скриптов, в контекстном меню окна Project есть пункт Sync To VisualStudio. Жмешь его и переходишь в студию. Структура проекта обновится.

den 13.08.2010 15:52

Ответ: Фак по Юнити.
 
Вложений: 1
Цитата:

В папке с проектом юнити создается *.sln файл, который можно студией открыть если уш так не получается
не открывается:(
Вложение 10980

pax 13.08.2010 15:56

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

Сообщение от Den (Сообщение 158237)
не открывается:(
Вложение 10980

Поставь 2008-ю студию ;)

Nuprahtor 13.08.2010 19:07

Ответ: Фак по Юнити.
 
Den
Насчет смены управления - пробовал это?

den 15.08.2010 00:59

Ответ: Фак по Юнити.
 
Дабы прервать очень умную дискусию культурных людей, я задам вопрос. Вопрос адресовывается pax:
Как ты построилкривую бизье в гисмозе, да ещё заставил объект по это кривой передвигатся?
http://unity3d.ru/distribution/download/file.php?id=878

Andvrok 15.08.2010 01:35

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

Сообщение от Den (Сообщение 158437)
Как ты построилкривую бизье в гисмозе, да ещё заставил объект по это кривой передвигатся?
http://unity3d.ru/distribution/download/file.php?id=878

В FPS примере используется такая вещь, посмотри там, может что найдешь.

pax 15.08.2010 10:07

Ответ: Фак по Юнити.
 
2Den Ответ скрыт во втором посте вот этого топика (ссылка) ;)

den 15.08.2010 23:23

Ответ: Фак по Юнити.
 
Всё время писал на JS.
Сейчас решил на C# попробывать.
Вот код на JS
PHP код:

GUI.Label(Rect(10,10,50,100), life);
//где life это int переменная 

а как это сделать на C#
я тока сделал вот что
PHP код:

GUI.Label(new Rect(10,10,50,100), life);
//но он ругается на 2 переменую, типа она должна быть string 

как быть???:dontknow:

pax 15.08.2010 23:40

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

GUI.Label(new Rect(10,10,50,100), life.ToString()); 


den 16.08.2010 16:59

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

using UnityEngine;
using System.Collections;

public class 
mainMenu MonoBehaviour {
public 
Rect  windowRect1= new Rect (202012050);
public 
Rect  windowRect2= new Rect (202012050);
private 
string b1;
private 
string b2;
private 
bool a=false;
private 
bool menu=false;
public 
float g=5.0f;
void OnGUI()
    {
         if((
menu &&  (Application.loadedLevel==1))||(Application.loadedLevel==0)){windowRect1 GUI.Window (0windowRect1MyWindow1"Main Menu");
            if(
awindowRect2 GUI.Window (0windowRect2MyWindow2"Setting");}
        if(
Application.loadedLevel==0)
        {
            
b1="Play";
            
b2="Exit";
        }
        if(
Application.loadedLevel==1)
        {
            
b1="Continue";
            
b2="Main Menu";
            if(
Input.GetAxis("Esc")!=0)
            {            
                
menu=true;
                
Screen.lockCursor false;
            }
            if(
menuTime.timeScale=0.1f//  СТРОЧКА!!!!
            
else Time.timeScale=1.0f;
        }
    }
    
    
void MyWindow1 (int windowID
    {
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button(b1))
        {
            if(
Application.loadedLevel==0Application.LoadLevel(1);
            if(
Application.loadedLevel==1)
            {
                
Screen.lockCursor true;
                
menu=false;
            }
        }
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button("Setting")) a=!a;
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button(b2))  // СТРОЧКА!!!
        
{
            if(
Application.loadedLevel==1Application.LoadLevel(0);
            if(
Application.loadedLevel==0Application.Quit();
        }
        
GUILayout.EndHorizontal();
        
//GUI.DragWindow();
    
}
    
void MyWindow2 (int windowID
    {
        
GUILayout.BeginHorizontal();
        
GUILayout.Label("Graphics");
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        
g=GUILayout.HorizontalSlider(g,0,6);
        if(
g>=&& g<1)
            
QualitySettings.currentLevel QualityLevel.Fastest;
        if(
g>=&& g<2)
            
QualitySettings.currentLevel QualityLevel.Fast;
        if(
g>=&& g<3)
            
QualitySettings.currentLevel QualityLevel.Simple;
        if(
g>=&& g<4)
            
QualitySettings.currentLevel QualityLevel.Good;
        if(
g>=&& g<5)
            
QualitySettings.currentLevel QualityLevel.Beautiful;
        if(
g>=&& g<6)
            
QualitySettings.currentLevel QualityLevel.Fantastic;
        
GUILayout.EndHorizontal();
        
GUILayout.BeginHorizontal();
        if(
GUILayout.Button("Ok")) a=!a;
        
GUILayout.EndHorizontal();
        
//GUI.DragWindow();
    
}


Почему если вместь if(menu) Time.timeScale=0.1f; поставить if(menu) Time.timeScale=0.0f;
то компилятор ругается
Цитата:

ArgumentException: Getting control 0's position in a group with only 0 controls when doing repaint
Aborting

UnityEngine.GUILayoutGroup.GetNext ()
UnityEngine.GUILayoutUtility.DoGetRect (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayoutUtility.GetRect (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayout.DoButton (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayout.Button (System.String text, UnityEngine.GUILayoutOption[] options) [0x00000]
mainMenu.MyWindow1 (Int32 windowID) (at Assets\mainMenu.cs:52)
UnityEngine.GUI+_Window.Do ()
UnityEngine.GUI.EndWindows (UnityEngine.IDList idlist)
UnityEngine.GUIUtility.EndGUI (Int32 doLayout, Int32 doWindows, UnityEngine.IDList idlist)
UnityEditor.EditorGUIUtility:RenderGameViewCameras (Rect, Rect, Boolean, Boolean)
UnityEditor.EditorGUIUtility:RenderGameViewCameras (Rect, Rect, Boolean, Boolean)
UnityEditor.GameView:OnGUI()
System.Reflection.MonoMethod:InternalInvoke(Object , Object[])
System.Reflection.MonoMethod:InternalInvoke(Object , Object[])
System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
System.Reflection.MethodBase:Invoke(Object, Object[])
UnityEditor.HostView:Invoke(String)
UnityEditor.MaximizedHostView:OnGUI()
но не сразу а после нажатия кнопки "Continue" ??
Тыкает меня на if(GUILayout.Button(b2))
Почему?

pax 16.08.2010 17:07

Ответ: Фак по Юнити.
 
GUI - это такая хитрая штука в юнити, что за кадр может отрисовываться до пяти раз. Следовательно и код отрисовки тоже столько же раз может повториться. Ошибка эта проявляется тогда, когда у GUI не получается отрисовать один из проходов помоему. Но тут проблема скорее всего не в этом, а в том, что ты читаешь Input в методе OnGUI, а он предназначен для метода Update.

PS: кстати зачем нужна строчка Screen.lockCursor = false;? Не достаточно ли просто его скрыть?

den 16.08.2010 17:27

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

den 16.08.2010 18:25

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

using UnityEngine
using System.Collections

public class 
MainMenuMonoBehaviour 
public 
Rect  windowRect1= new Rect (202012050); 
public 
Rect  windowRect2= new Rect (202012050); 
private 
string b1
private 
string b2
public 
bool menu=false;
public 
Camera cam;
public 
Transform FPS;
private 
bool a=false
public 
float g=5.0f
void OnGUI() 
    { 
             if((
menu &&  (Application.loadedLevel==1))||(Application.loadedLevel==0)){windowRect1 GUI.Window (0windowRect1MyWindow1"Main Menu"); 
            if(
awindowRect2 GUI.Window (0windowRect2MyWindow2"Setting");}
            if(
menu)
            {
                
Time.timeScale=0.1f// <---- Вот здеся)
            
}
            else 
Time.timeScale=1.0f;
    } 
     
    
void MyWindow1 (int windowID)  
    { 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button(b1)) 
        { 
            if(
Application.loadedLevel==0Application.LoadLevel(1); 
            if(
Application.loadedLevel==1
            { 
                
Screen.lockCursor true
                
menu=false
            } 
        } 
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button("Setting")) a=!a
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button(b2))
        { 
            if(
Application.loadedLevel==1Application.LoadLevel(0); 
            if(
Application.loadedLevel==0Application.Quit(); 
        } 
        
GUILayout.EndHorizontal(); 
        
//GUI.DragWindow(); 
    

    
void MyWindow2 (int windowID)  
    { 
        
GUILayout.BeginHorizontal(); 
        
GUILayout.Label("Graphics"); 
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        
g=GUILayout.HorizontalSlider(g,0,6); 
        if(
g>=&& g<1
            
QualitySettings.currentLevel QualityLevel.Fastest
        if(
g>=&& g<2
            
QualitySettings.currentLevel QualityLevel.Fast
        if(
g>=&& g<3
            
QualitySettings.currentLevel QualityLevel.Simple
        if(
g>=&& g<4
            
QualitySettings.currentLevel QualityLevel.Good
        if(
g>=&& g<5
            
QualitySettings.currentLevel QualityLevel.Beautiful
        if(
g>=&& g<6
            
QualitySettings.currentLevel QualityLevel.Fantastic
        
GUILayout.EndHorizontal(); 
        
GUILayout.BeginHorizontal(); 
        if(
GUILayout.Button("Ok")) a=!a
        
GUILayout.EndHorizontal(); 
        
//GUI.DragWindow(); 
    

    
    
void Update()
    {
        if(
Application.loadedLevel==0
        { 
            
b1="Play"
            
b2="Exit"
            
Screen.lockCursor false
        } 
        if(
Application.loadedLevel==1
        { 
            
cam.gameObject.GetComponent<MouseLook>().enabled=!menu;
            
FPS.gameObject.GetComponent<MouseLook>().enabled=!menu;
gameObject.GetComponent<Strelok>().enabled=!menu;
            
b1="Continue"
            
b2="Main Menu"
            if(
Input.GetAxis("Esc")!=0
            {             
                
menu=true
                
Screen.lockCursor false
            } 
        } 
    }


вот новый код.
ошибок некаких не выдаёт.
Но как видно он ставит не на паузу (Time.timeScale=0.1f; ).
А мне надо на паузу (Time.timeScale=0.0f; )
но когда я так изменю строку , игра не снимается с паузы (ошибок никаких не выдаёт).
Помогите!:''((
---------------
---------------
---------------
PHP код:

using UnityEngine;
using System.Collections;

public class 
Apteka MonoBehaviour {
    public  
int  prib=10;
    public 
Collider igrok;
    
void OnCollisionEnter (Collision coll)
    {
        if(
igrok == coll.collider)
            global.
live+=prib
    }


это скрипт аптечки.
igrok - это FPS плэйер
global.live - это его жизни
Но почему скрипт срабатывает только если апчтечка упадёт игроку на голову?

pax 17.08.2010 00:09

Ответ: Фак по Юнити.
 
Я бы попробовал так:
PHP код:

if(GUILayout.Button(b1))  //или b2
        
{  
             
Time.timeScale=1.0f;
        }

...

            if(
Input.GetButtonDown("Esc"))  
            {              
                
menu=true;  
                
Screen.lockCursor false;  
                
Time.timeScale=0.0f;
            } 

А по поводу второго вот (ссылка) Тока не забудь поставить колайдеру аптечки - is trigger

den 17.08.2010 01:01

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

Я бы попробовал так:
я так тоже пробывал не помогает: главное курсор после нажатия кнопки Esc становится в центр, но не исчезает!
Похуду при timeScale=0 некоторые функции просто неработают.
Но я сделал Time.timeScale=0.001f; ,впринцепе не заметно что игра не на паузе, а просто замедлилась в 1000 раз:-D
------------
Цитата:

А по поводу второго вот (ссылка) Тока не забудь поставить колайдеру аптечки - is trigger
а если у объекта стоит твйрдое тело?
При is trigger он просто проваливается...

pax 17.08.2010 11:16

Ответ: Фак по Юнити.
 
А ты попробуй убрать все Screen.lockCursor = true;

Цитата:

Сообщение от Den (Сообщение 158689)
а если у объекта стоит твйрдое тело?
При is trigger он просто проваливается...

Тогда OnCollisionEnter должна быть у игрока, и при столкновении с чем-то он должен проверять, с чем столкнулся. И если это аптечка - то добавлять себе жизней и удалять аптечку. Просто, по моему, OnCollisionEnter вызывается у объектов, которые двигались, а не у тех, которые были неподвижны до столкновения.

den 17.08.2010 18:08

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

bool n=false;
        
GameObject[] vrags GameObject.FindGameObjectsWithTag("vrag"); 
        for(
GameObject vr in vrags)
        {
            if(
Vector3.Distance(vr.transform,transform)<=10)
                
n=true;
        } 

почему не работает?
на JS всё работает, решил на C# переписать нефига!

h1dd3n 17.08.2010 18:42

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

den 17.08.2010 18:55

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

foreach?
так чтоли?
PHP код:

bool n=false;
        
GameObject[] vrags GameObject.FindGameObjectsWithTag("vrag"); 
        for(
GameObject vr foreach vrags)
        {
            if(
Vector3.Distance(vr.transform,transform)<=10)
                
n=true;
        } 

можно поконкретнее...

SBJoker 17.08.2010 18:58

Ответ: Фак по Юнити.
 
проффи....ыыы...
Код:

foreach([var] in [array]){

}

З.Ы. тема почищена

Zer0n 18.08.2010 19:46

Ответ: Фак по Юнити.
 
BOO это дилог Питона.
Собственно, мой вопрос. При юзании формата .max(.mb, etc("родных")) глюков не замечено???

Horror 19.08.2010 00:24

Ответ: Фак по Юнити.
 
Я юнити и не видел, но читая форум заметил, (если я не ошибаюсь рах) говорил, что юзанье форматов типо 3д макса не хорошо. т.к. он его все ровно через макс открывает, там он какой то формат посоветовал флх (вроде).

ПС если ты вообще про Макс)

pax 19.08.2010 01:42

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

Сообщение от Horror (Сообщение 158873)
формат посоветовал флх (вроде)

FBX - формат который юнити поддерживает нативно полностью (меши, склкты, анимации, материалы). Родные форматы пакетов 3D моделинга и анимации юнити экспортирует в формат FBX используя установленный пакет, а потом его импортирует.

У программистов в команде чаще всего не бывает установленных пакетов 3D моделирования, и как бы вы не хотели, они импортировать в проект вашу модель в формате *.max (3ds max) или *.mb (Maya Binary) не смогут. Так что лучше всего использовать FBX всегда.

Zer0n 19.08.2010 09:27

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

Сообщение от pax (Сообщение 158883)
FBX - формат который юнити поддерживает нативно полностью (меши, склкты, анимации, материалы). Родные форматы пакетов 3D моделинга и анимации юнити экспортирует в формат FBX используя установленный пакет, а потом его импортирует.

У программистов в команде чаще всего не бывает установленных пакетов 3D моделирования, и как бы вы не хотели, они импортировать в проект вашу модель в формате *.max (3ds max) или *.mb (Maya Binary) не смогут. Так что лучше всего использовать FBX всегда.

А у мну есть макс! ;) Поэтому я юзаю формат .max! :cool:

pax 19.08.2010 10:02

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

Сообщение от SlavyanOOs (Сообщение 158909)
А у мну есть макс! ;) Поэтому я юзаю формат .max! :cool:

Это дело твое ;)

Nuprahtor 19.08.2010 11:18

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

А у мну есть макс! Поэтому я юзаю формат .max!
А вот меня всегда бесило, что в туториалах по юнити текстуры и изображения хранятся в .PSD (!). Естественно, они переводятся движком в свой формат, но такую дикость я не понял и всегда сохраняю спрайты/текстуры в tga/png.

pax 19.08.2010 11:22

Ответ: Фак по Юнити.
 
PSD - это хорошо, когда работаешь совместно с дизайнерами в одном проекте. Можно хранить в исходниках, т.к. PSD открывают достаточно большое число редакторов. Вот модели в оригинальном формате хранить - это шик.

SBJoker 19.08.2010 17:53

Ответ: Фак по Юнити.
 
Это ламерство для ламеров.

Randomize 19.08.2010 19:50

Ответ: Фак по Юнити.
 
Вот ведь кухня.
И Max кушет и Psd.
Точно не хватает кнопки "Мейк ми хеппи"

ffinder 20.08.2010 00:14

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

Illidan 20.08.2010 15:17

Ответ: Фак по Юнити.
 
такой вопрос... Вот например нужно 1000 - 2000 интерактивных мешей. и чтоб они значит пикались и перемещались туда сюда+ желательно чтоб на них можно было класть текстурку. итак вопрос, как оптимизировать колличество драуколов при сохранении интерактивности? потому как 2к уже существенно снижают производительность.
в голову приходит только обьединение всего и вся программно в синглсюрфейс и вычисление пиков по треугольникам. Может этот костыль тоже реализован?

SBJoker 20.08.2010 15:38

Ответ: Фак по Юнити.
 
Это называется инстансинг.

Illidan 20.08.2010 15:41

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

pax 20.08.2010 16:32

Ответ: Фак по Юнити.
 
А что понимается под интерактивным мешем?

Illidan 20.08.2010 16:42

Ответ: Фак по Юнити.
 
чтоб функция "апдэйт" былау каждого.

pax 20.08.2010 16:55

Ответ: Фак по Юнити.
 
Тогда может тормоза не из-за дравколов? Попробуй сделать один объект - один материал. И чтобы объекты были префабами. Тогда инстансинг возможно поможет. Но это не решит задачу снижения нагрузки в Update. Если они все имеют коллайдеры, то возможно стоит добавить им компонент RigidBody и поставить у него галочку IsKinematic. Это возможно снизит нагрузку на физику.

UPD: Вообще посмотри в профайлере, что больше нагружает - код, физика или графика. Поймешь что нужно оптимизировать.

Fatalix3d 20.08.2010 17:47

Ответ: Фак по Юнити.
 
В юнити 2.6 инстансинга нет, но есть в 3.0 есть то ли динамический или статический точно незнаю но есть, 2000 дк конечно не айс. Вопрос смахивает честно говоря а держит оно столько или столько (мерка письками), не один человек не допустит 2000 ентитей в кадре, КомбайнМеш спасет нав.)

Вышла Юнити бета 6!) Вечером заценю).

Illidan 20.08.2010 17:53

Ответ: Фак по Юнити.
 
у меня на сцене сейчас 2 тысячи прямоугольников, размноженных из префаба. в префабе загруженный из файла меш(плоскость 2полигона) + материал(стандартный дифуз)+ скрипт(апдейт пуст), физика не подключенна. в редакторе эта сцена выдает около 50фпс. что может тут тормозить кроме драуколов, коих ровно 2к?

Цитата:

Сообщение от Fatalix3d (Сообщение 159123)
В юнити 2.6 инстансинга нет, но есть в 3.0 есть то ли динамический или статический точно незнаю но есть, 2000 дк конечно не айс. Вопрос смахивает честно говоря а держит оно столько или столько (мерка письками), не один человек не допустит 2000 ентитей в кадре, КомбайнМеш спасет нав.)

Вышла Юнити бета 6!) Вечером заценю).

Сорри, если так показалось. Я действительно хотел узнать, есть ли встроенное решение проблемы, мне это секйчас необходимо. комбайнмеш вроде только для статики.

а! и еще где этот профайлер и как его посмотреть?)

pax 20.08.2010 18:03

Ответ: Фак по Юнити.
 
А что вообще за задача? Что с этими квадами нужно будет делать?

Illidan 20.08.2010 18:13

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

Сообщение от pax (Сообщение 159127)
А что вообще за задача? Что с этими квадами нужно будет делать?

я хочу пикать по ним, и назначать цвет. каждому поотдельности. + еще перемещать их хочу рендомно.

pax 20.08.2010 18:24

Ответ: Фак по Юнити.
 
Ну тогда можно избавится от скрипта с Update и удалить коллайдер, достаточно под них подставить коллайдер (на всю площадь. например план с MeshCollider) и по пикнутому месту (по координатам) определять объект, который выбрали (немного математики, но производительность вырастет). Для уменьшения дравколов можно рисовать эти квады низкоуровневыми командами (отсортировать по материалам например еще), а не создавать экземпляры объектов. Решений по оптимизации можно много придумать, главное видель задачу. Самое безумное - рисовать эти квады как частицы :4to:

Illidan 20.08.2010 18:40

Ответ: Фак по Юнити.
 
ну яж вроде написал что 50 фпс это без колайдеров. хмм.. разве нет встроенных функций вычисляющих координаты пика?

Цитата:

Сообщение от pax (Сообщение 159135)
Для уменьшения дравколов можно рисовать эти квады низкоуровневыми командами (отсортировать по материалам например еще), а не создавать экземпляры объектов.

вот это наверное придется использовать.

Цитата:

Сообщение от pax (Сообщение 159135)
Самое безумное - рисовать эти квады как частицы :4to:

может и не так безумно...

pax 20.08.2010 19:26

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

Сообщение от Illidan (Сообщение 159143)
хмм.. разве нет встроенных функций вычисляющих координаты пика?

Что такое пик по твоему? Это Тест на пересечение луча с геометрией (где-то еще помню использовался какой-то буфер экрана для извлечения идентификатора пикнутого объекта). В юнити выбрать объект в 3d можено выполнив рейкаст через физику на пересечение с коллайдерами. У меня сейчас нет возможностей по справке полазить (я с загрузочного диска сижу), но порядок примерно такой такой:
1. Camera.mainCamera.ScreanPointToRay(Input.mousePosi tion) - луч
2. Создать переменную RayCastHit, в которую принимать результат (кординаты, нормаль, коллайдер и т.д.)
3. Phisics.RayCast()
4. Обработка результата

Скорее всего названия функций неправильно написал, т.к. по памяти.

den 20.08.2010 22:39

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

using UnityEngine;
using System.Collections;

public class 
PicPicPic MonoBehaviour
{
    public 
void Update()
    {
        if (
Input.GetMouseButtonDown(0))
        {
            
Ray mouseRay camera.ScreenPointToRay(Input.mousePosition);
            
            
RaycastHit hit;

            if (
Physics.Raycast(mouseRayout hit))
            {
                
//Пикнули геометрию (точнее коллайдер)
                //hit.point -точка пика
            
}
        }
    }



Illidan 21.08.2010 04:35

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

pax 21.08.2010 10:08

Ответ: Фак по Юнити.
 
Моно в юнити встроен и ничего ставить дополнительно не надо ;)

den 21.08.2010 13:30

Ответ: Фак по Юнити.
 
Mono это какбэ дополнение к .Net для кроссплатформенности. (шоб не только для виндой компилировать)

Illidan 21.08.2010 14:02

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

Сообщение от Den (Сообщение 159243)
Mono это какбэ дополнение к .Net для кроссплатформенности. (шоб не только для виндой компилировать)

ну этото понятно... просто может кто подробней рассказать может? а то даж почитать по русски ненашел где о ней

pax 21.08.2010 16:54

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

Сообщение от Den (Сообщение 159243)
Mono это какбэ дополнение к .Net для кроссплатформенности. (шоб не только для виндой компилировать)

Что за дополнение такое?

Mono - кросплатформенная реализация Net Framework'а. Т.е. фреймворк, дающий возможность писать на любимом C# (и др. языках) для Windows, Linux, MacOS. Есть даже реализация для айфона.

Оффициальный сайт
Описание на википедии

den 21.08.2010 16:58

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

Что за дополнение такое?

Mono - кросплатформенная реализация Net Framework'а. Т.е. фреймворк, дающий возможность писать на любимом C# для Windows, Linux, MacOS. Есть даже реализация для айфона.
Ну я же сказал какбэ, просто слово "кросплатформенная реализация" чё то не вспомнил :)

pax 21.08.2010 16:59

Ответ: Фак по Юнити.
 
Это не дополнение, это альтернатива.


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

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