forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

pax 22.06.2012 19:57

Ответ: Вопросы от новичка
 
Ну собственно тогда делай инспектор для TextAsset с проверкой формата в OnEnable, если такой формат поддерживается твоим редактором - загружай нужный редактор. Я так делал для наших графов в Antares Universe. Если формат не читабелен - отображал дефолтный редактор. Правда графы все с расширением bytes были, так что в файлик просто добавь заголовок, чтобы проверить формат.

WISHMASTER35 22.06.2012 21:00

Ответ: Вопросы от новичка
 
Спасибо. Только DrawDefaultInspector() не отображает дефолтный инспектор. Может в OnEnable можно как-то выключить мой редактор?
Кстате, плохо, что формат файла не проверишь( Да и вообще лучше бы сделали FileAsset, а то для бинарных файлов использовать TextAsset как-то не логично)))

pax 22.06.2012 22:18

Ответ: Вопросы от новичка
 
для бинарных файлов TextAsset.bytes все байты "файла". Единственное сохранять надо непосредственно в файл и делать Refresh потом. Махинации да, но работать можно.

WISHMASTER35 22.06.2012 23:51

Ответ: Вопросы от новичка
 
pax, а ты пользовался Graphics.DrawMeshNow или Graphics.DrawMesh?
Не представляю зачем они в игре могут понадобится.
Я через Graphics.DrawMeshNow хочу рисовать модель в EditorWindow.
Уже почти все работает, но столкнулся с кучей проблем.
1) Нужно задавать RenderSettings.ambientLight, а после закрытия окна возвращать старой значение. Причем в событии Repaint это почему-то не срабатывает)
2) Загружать перспективную матрицу проекции, хотя это не проблема.
3) Почему-то надо изменять GL.SetRevertBackfacing на true. Ибо кулинг в OnGUI не так работает.
4) Без Transform нормально нельзя вращать модель(
5) Не работает тест глубины. И как ее включить я пока не пойму(

Вообщем код пока выглядит так
Код:

void OnGUI() {
        if(Event.current.type == EventType.Repaint) {
                GL.PushMatrix();
                float aspect = position.width/position.height;
                Matrix4x4 projMatrix = Matrix4x4.Perspective(65, aspect, 0, 100);
                GL.LoadProjectionMatrix(projMatrix);
                GL.SetRevertBackfacing(true);
                OnRender();
                GL.SetRevertBackfacing(false);
                GL.PopMatrix();
        }
}

private void OnRender() {
        material.SetPass(0);
        Graphics.DrawMeshNow(mesh, meshPosition, Quaternion.Euler(meshRotation));
}


pax 23.06.2012 12:07

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 231162)
pax, а ты пользовался Graphics.DrawMeshNow или Graphics.DrawMesh?

Нет, я не пробовал использовать ее в GUI. По моему там другие методы были для визуализации 3d в GUI... что-то я уже забыл...

WISHMASTER35 23.06.2012 13:02

Ответ: Вопросы от новичка
 
Везде рекомендуют создавать в сцене временный объект и камеру и рендерить объект в RenderTexture, а потом рисовать в OnGUI. Ужасный способ и только для Pro.
Других методов не нашел(

pax 23.06.2012 23:14

Ответ: Вопросы от новичка
 
Есть способ рисовать камеру через Handles.DrawCamera(...), в OnGUI я использовал Camera.Render для отрисовки внутри GUI, правда в рантайме а не в редакторе, но думаю будет одно и то же, только не забывать очищать глубину перед отрисовкой...

WISHMASTER35 24.06.2012 16:10

Ответ: Вопросы от новичка
 
Вообще не понял как отрендерить модель в EditorWindow с помощью Camera.Render.
Render это не статический метод. Получается камеру брать надо из сцены, а в сцене ее может и не быть.
И даже если вызвать Render у камеры из сцены, то отрендерится вся сцена и все равно не в мое окно(:

pie 24.06.2012 17:53

Ответ: Вопросы от новичка
 
Всем привет. У кого нибудь нету туториала синхронизации анимации по сети нету? Стандартный пример не подходит т.к. не работает на версии 3.4.

pie 24.06.2012 18:29

Ответ: Вопросы от новичка
 
Ну или хотя бы дайте намек как это все синхронизировать? Есть 3 вида анимации. Бег вперед, влево, вправо. Если по скорости только то не выйдет. Нажатие клавиши направления отправлять? Или только в зависимости от значения vertical и horizontal (плюс или минус).

pax 24.06.2012 19:58

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 231263)
Вообще не понял как отрендерить модель в EditorWindow с помощью Camera.Render.
Render это не статический метод. Получается камеру брать надо из сцены, а в сцене ее может и не быть.
И даже если вызвать Render у камеры из сцены, то отрендерится вся сцена и все равно не в мое окно(:

PHP код:

using UnityEditor;
using UnityEngine;

public class 
ModelRendererWindow EditorWindow
{

    [
MenuItem("Window/render")]
    public static 
void CreateWin()
    {
        var 
win CreateInstance<ModelRendererWindow>();
        
win.autoRepaintOnSceneChange true;
        
win.Show();
    }

    private 
Camera cam;
    private 
GameObject cube;
    private 
GameObject parentGO;

    
void OnEnable()
    {
        
cam = new GameObject("Cam"typeof(Light), typeof(Camera)).camera;
        
cam.light.cullingMask cam.cullingMask;
        
cam.light.range 10;

        
cam.gameObject.hideFlags HideFlags.HideAndDontSave;
        
cam.enabled false;
        
cam.transform.position = new Vector3(00, -3);
        
cube GameObject.CreatePrimitive(PrimitiveType.Cube);
        
cube.hideFlags HideFlags.HideAndDontSave;
        
cube.transform.rotation Random.rotation;
        
parentGO = new GameObject("parent");
        
parentGO.hideFlags HideFlags.HideAndDontSave;
        
cube.transform.parent parentGO.transform;
        
cam.transform.parent parentGO.transform;
        
parentGO.transform.position Vector3.one 70000f;
    }

    
void OnDisable()
    {
        
DestroyImmediate(parentGO);
    }

    
void OnGUI()
    {
        if (
Event.current.type == EventType.Repaint)
        {
            var 
rect = new Rect(00position.widthposition.height);
            
Handles.SetCamera(rectcam);
            
Handles.DrawCamera(rectcam);
        }
    }




WISHMASTER35 24.06.2012 21:40

Ответ: Вопросы от новичка
 
Все бы хорошо, но z тест все равно не работает(: А у тебя работало?
pie, а их надо синхронизировать? Если их везде вовремя включать, то должно быть нормально.

pax 24.06.2012 22:39

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 231292)
Все бы хорошо, но z тест все равно не работает(: А у тебя работало?

Попробуй так (но для этого надо Pro):
PHP код:

using UnityEditor;
using UnityEngine;

public class 
ModelRendererWindow EditorWindow
{

    [
MenuItem("Window/render")]
    public static 
void CreateWin()
    {
        var 
win CreateInstance<ModelRendererWindow>();
        
win.autoRepaintOnSceneChange true;
        
win.Show();
    }

    private 
Camera cam;
    private 
GameObject cube;
    private 
GameObject parentGO;

    
void OnEnable()
    {
        
parentGO = new GameObject("parent");
        
parentGO.hideFlags HideFlags.HideAndDontSave;

        
cam = new GameObject("Cam"typeof(Light), typeof(Camera)).camera;
        
cam.light.cullingMask cam.cullingMask;
        
cam.light.range 10;

        
cam.gameObject.hideFlags HideFlags.HideAndDontSave;
        
cam.enabled false;
        
cam.transform.position = new Vector3(00, -3);
        
cube GameObject.CreatePrimitive(PrimitiveType.Cube);
        
cube.hideFlags HideFlags.HideAndDontSave;
        
cube.transform.rotation Random.rotation;
        
cube.transform.parent parentGO.transform;

        
cube GameObject.CreatePrimitive(PrimitiveType.Cube);
        
cube.hideFlags HideFlags.HideAndDontSave;
        
cube.transform.rotation Random.rotation;
        
cube.transform.position = new Vector3(0,0,0.1f);
        
cube.transform.parent parentGO.transform;

        
cube.transform.parent parentGO.transform;
        
cam.transform.parent parentGO.transform;
        
parentGO.transform.position Vector3.one 70000f;
    }

    
void OnDisable()
    {
        
DestroyImmediate(parentGO);
    }

    
void OnGUI()
    {
        if (
Event.current.type == EventType.Repaint)
        {
            var 
rt RenderTexture.GetTemporary((int) position.width, (int) position.height24);
            
cam.targetTexture rt;
            
RenderTexture.active rt;
            
cam.clearFlags CameraClearFlags.SolidColor;
            
cam.backgroundColor = new Color32(49,77,121,255);
            
cam.Render();
            
RenderTexture.active null;
            
cam.targetTexture null;
            
GUI.DrawTexture(new Rect(00position.widthposition.height),rt);
            
RenderTexture.ReleaseTemporary(rt);
        }
    }




pie 24.06.2012 22:54

Ответ: Вопросы от новичка
 
Как узнать изменились ли координаты x и z. Чтобы поставить это в условие. Типо этого:
PHP код:

if (изменились ли координаты x и y)
{




WISHMASTER35 24.06.2012 23:41

Ответ: Вопросы от новичка
 
pax, спасибо, но у меня инди.
А нельзя сделать, чтобы когда рисуешь например box'ы, то они не вылазили за границы? А то, если текстура у box'а большая, то box не уменьшается, хотя при ExpandWidth(true) кажется растягивается.
pie, сравнивай с предыдущими координатами.


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

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