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)

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, сравнивай с предыдущими координатами.

WISHMASTER35 25.06.2012 01:22

Ответ: Вопросы от новичка
 
Вложений: 1
Когда-то пытался написать окошко с выбором текстуры как в TerrainEditor.
Теперь смог написать))
Кнопки хорошо масштабируется и автоматически переносится на новую строку.
Код:

private static int SelectionSpriteGrid(int selected, XAtlas atlas, int approxSize) {
                Texture texture = atlas.GetMaterial().mainTexture;
                List<XSprite> sprites = atlas.GetSprites();
               
                const int yIndent = 5;
                int xCount = Screen.width / approxSize;
               
                GUILayout.BeginVertical("box");
                for(int i=0; i<sprites.Count;) {
                        GUILayout.BeginHorizontal();
                        for(int x=0; x<xCount; x++, i++) {
                                Rect itemRect = GUILayoutUtility.GetAspectRect((float)approxSize/(approxSize+yIndent));
                                if(i >= sprites.Count) continue;
                               
                                if(selected == i) {
                                        Rect selectRect = new Rect(itemRect.x+1, itemRect.yMax-yIndent, itemRect.width-2, yIndent);
                                        Color color = new Color(0.23f, 0.5f, 0.99f, 1f);
                                        DrawRect(selectRect, color);
                                }
                               
                                itemRect.xMin += 1;
                                itemRect.xMax -= 1;
                                itemRect.yMin += 1;
                                itemRect.yMax -= 1+yIndent;
                                if(Event.current.type == EventType.MouseDown && itemRect.Contains(Event.current.mousePosition)) {
                                        selected = i;
                                        GUI.changed = true;
                                }
                                GUI.DrawTextureWithTexCoords(itemRect, texture, sprites[i].GetFixedRect());
                        }
                        GUILayout.EndHorizontal();
                }
               
                GUILayout.EndVertical();
                return selected;
        }
       
        private static void DrawRect(Rect rect, Color color) {
                Vector3 a = new Vector3(rect.xMin, rect.yMin, 0);
                Vector3 b = new Vector3(rect.xMax, rect.yMin, 0);
                Vector3 c = new Vector3(rect.xMax, rect.yMax, 0);
                Vector3 d = new Vector3(rect.xMin, rect.yMax, 0);
               
                GL.Color(color);
                GL.Begin(GL.TRIANGLES);
                GL.Vertex(a);
                GL.Vertex(b);
                GL.Vertex(c);
                GL.Vertex(c);
                GL.Vertex(d);
                GL.Vertex(a);
                GL.End();
        }

Только данный код для моих спрайтов, но переделать будет легко.

pax 25.06.2012 08:52

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

Сообщение от WISHMASTER35 (Сообщение 231327)
Когда-то пытался написать окошко с выбором текстуры как в TerrainEditor.
Теперь смог написать))
Кнопки хорошо масштабируется и автоматически переносится на новую строку.
Только данный код для моих спрайтов, но переделать будет легко.

Выкладывая такой код надо бы выкладывать сопутствующие классы (XAtlas, XSprite) и объяснять какую роль играют. Иначе код для начинающих бесполезен. Да и для такого поста место в отдельной теме.

PS: Кстати GL и Graphics должны так же поддерживаться только в Pro.

WISHMASTER35 25.06.2012 12:28

Ответ: Вопросы от новичка
 
Если я выложу и остальной код, то для начинающего будет еще сложнее. Впрочем начинающие не лезут в редактор.
Там кстате, странный баг есть. DrawRect в разных местах рисуется более светлым или темным. Не пойму в чем дело.
Использую GL и Graphics в инди версии. Возможно не все функции присутствуют.

WISHMASTER35 25.06.2012 16:45

Ответ: Вопросы от новичка
 
А свои классы нельзя наследовать от Object?
Попробовал так сделать, но в таком классе поля не сохраняются. Если проверять ссылку на такой класс на null, то результат всегда положителен т.е. ссылка равна null, хотя это не так.

Собственно хотел, чтобы в одном классе хранились списки спрайтов, а в других классах хранились ссылки на спрайты, именно на те объекты, а не их копии. Думал, если наследовать от Object, то будет так, но оно еще хуже)

pax 25.06.2012 17:10

Ответ: Вопросы от новичка
 
ScriptableObject с сохранением в ассеты, либо делай свою сериализацию с поддержкой ссылок. Мы кстати тестировали сцену с большим количеством перекрестных ссылок - делали карту двухмерную, в каждом тайле добавляли ссылку на соседние тайлы (хотели сделать граф для поиска путей). так вот сцена сохранялась, а при открытии Unity падало. Поддержка сказала, что это известный баг, но второстепенный, поэтому не знаю, исправили ли его...

WISHMASTER35 25.06.2012 18:22

Ответ: Вопросы от новичка
 
Префабы плодить не хочу. Сейчас у меня у каждого спрайта свой id и я сравниваю эти id, а не ссылки, но это довольно не удобно(
А что за сериализацию с поддержкой ссылок?
Класс я помечаю аннотацией [System.Serializable], но это не помогает.

pax 25.06.2012 18:25

Ответ: Вопросы от новичка
 
Нет, я имею ввиду сохраняй все в свой формат с поддержкой ссылок (сам пиши механизм нахождения ссылок). Другого варианта нет. Вообще на твоем бы месте я оставил все как есть, раз работает.

Можно сделать каждый спрайт MonoBehaviour и вешать эти компоненты на какой-то дочерний объект - держатель информации. Тогда сможешь сохранить на них ссылки.

WISHMASTER35 25.06.2012 18:52

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

Можно сделать каждый спрайт MonoBehaviour и вешать эти компоненты на какой-то дочерний объект - держатель информации.
Это уже интереснее. Можно даже на объект атласа повесить его спрайты, если можно будет эти спрайты скрыть в инспекторе.
Цитата:

Вообще на твоем бы месте я оставил все как есть
Ну если так делать, то можно всю жизнь гомнокодить. Работает же))

А если у меня не MonoBehaviour, а ScriptableObject, то можно добавлять компоненты на префаб? gameObject.AddComponent тут нету(:

pax 25.06.2012 19:42

Ответ: Вопросы от новичка
 
Префаб это объект сцены, а не объект данных как ScriptableObject. Можно в один ассет добавлять много других - сделать сборный ассет.

Lowlet 25.06.2012 20:49

Ответ: Вопросы от новичка
 
зависит ли скорость выполнения функций Invoke и InvokeRepeating от фпс?Если да,то мне их надо перемножать на Time.deltaTime?

WISHMASTER35 25.06.2012 20:56

Ответ: Вопросы от новичка
 
Может и надо было оставить как работало)) Теперь вообще куча ошибок каких-то))
Добавляю спрайт на префаб, а вместо моего спрайта написано type mismatch. Что это значит?

pax 25.06.2012 20:57

Цитата:

Сообщение от Lowlet (Сообщение 231413)
зависит ли скорость выполнения функций Invoke и InvokeRepeating от фпс?Если да,то мне их надо перемножать на Time.deltaTime?

от FPS наверное не зависит, а вот от Time.timeScale должна.

Цитата:

Сообщение от WISHMASTER35 (Сообщение 231414)
написано type mismatch. Что это значит?

Несоответствие типов. Т.е. разные типы данных в одном выражении.

WISHMASTER35 25.06.2012 21:08

Ответ: Вопросы от новичка
 
Не знаю где там были разные типы данных, но было из-за того, что атлас и спрайт в одном месте.
Теперь бы еще разобраться с ArgumentException: Getting control 4's position in a group with only 4 controls when doing mouseDown
Aborting.

pax 25.06.2012 21:18

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

Сообщение от WISHMASTER35 (Сообщение 231418)
Теперь бы еще разобраться с ArgumentException: Getting control 4's position in a group with only 4 controls when doing mouseDown
Aborting.

Происходит при изменении GUI "не вовремя". Попробуй при нажатии на кнопку сделать GUIUtility.ExitGUI();

WISHMASTER35 25.06.2012 22:45

Ответ: Вопросы от новичка
 
Ошибка ArgumentException: Getting control 4's position in a group with only 4 controls when doing mouseDown
Aborting была из-за того, что я начинал рисовать Button в MouseDown)

Всегда думал, что если в шейдере написать "Queue" = "Background" то рисоваться будет от родителя к детям по иерархии. Но сейчас почему-то в одной сцене в редакторе это перестало работать. Других способов рисовать в таком порядке нету?

pax 26.06.2012 10:45

Ответ: Вопросы от новичка
 
"Queue" = "Background" - это слой, в котором все рисуется в произвольном порядке. Слой можно менять прибавлением цифры к названию слоя, например "Queue" = "Background+1". Чтобы рисовать по порядку - надо сделать один меш, в котором части (сабмеши) расположены по порядку. Либо если используется один и тот же материал, то индексы треугольников шли в нужном порядке.
Либо если тебя устроит скопировать материал и задать вручную порядок:
http://unity3d.com/support/documenta...nderQueue.html
Но не забывать что между стандартными слоями Unity разница в 1000: Background: 1000, Geometry: 2000, Transparent: 3000 и Overlay: 4000

is.SarCasm 26.06.2012 16:11

Ответ: Вопросы от новичка
 
Функция networkView.RPC принимает:
(string name, RPCMode mode, params object[] args)
Я отправляю:
(string , RPCMode ,string[])

Пример:
Цитата:

string[] h = GameOptions.playersNames.ToArray();
networkView.RPC("SendAllNames",RPCMode.Others,h);
void SendAllNames(string[] names)
Цитата:

GameOptions.playersNames.Clear();
foreach(string n in names)
{
GameOptions.playersNames.Add(n);
}
Ошибка:
Sending RPC failed because 'SendAllNames' parameter 0 didn't match the RPC declaration. Expected 'System.String[]' but got 'System.String'

pax 26.06.2012 16:29

Ответ: Вопросы от новичка
 
не уверен что будет работать, но может объявить как
void SendAllNames(params string[] names)
Но все равно сомнительно, что функция может принимать массивы
Цитата:

Valid RPC parameters are int, float, string, NetworkPlayer, NetworkViewID, Vector3 and Quaternion.
Я бы предложил использовать один строковый параметр, перед отправкой собирал бы имена в одну строку с помощью string.Join(), а при приеме разбирал бы через string.Split()

is.SarCasm 26.06.2012 17:05

Ответ: Вопросы от новичка
 
Спасибо, попробую (params я делал, не помогло)

WISHMASTER35 27.06.2012 22:08

Ответ: Вопросы от новичка
 
pax, спасибо, но у меня разные меши и разные материалы и хотел, чтобы динамический батчинг работал. Но видно мне это не поможет.
Свой GUI пробую делать) Видно лучше будет задать каждому мешу свою Z координату и включить Z буфер. В NGUI все в один меше, но я так не хочу т.к. придется и пересчитывать каждый кадр и памяти на это будет уходить.

pax 28.06.2012 17:40

Ответ: Вопросы от новичка
 
С Z-буфером в GUI будет отстой, тебе придется писать шейдеры с альфатестом, что даст плохой результат на прозрачности (краях). Так же Z-буфер не спасет при прозрачном GUI. Так что ИМХО не стоит. Z- не сортирует меши при отрисовке.

WISHMASTER35 28.06.2012 18:18

Ответ: Вопросы от новичка
 
Я когда-то писал шейдер, делал RenderType=Transparent чтобы меши сортировались по расстоянию до камеры и кажется полностью отключал работу с Z-буфером. Вообщем-то отлично работало, но правильно сортировалось только для 2д.
Интересно было бы и для 3д сделать, но там уже либо cutout либо черт его знает.

А стандартным GUI красивый шрифт не сделаешь? Как здесь http://static.starapk.com/images/pi2010120904334933.jpg например.

Кстати, заметил, что если Time.scaleTime сделать равным 0, то Time.deltaTime будет равен NAN и отсюда куча ошибок. А видь не сложно было сделать, чтобы вместо Nan deltaTime возвращала 0.

pax 28.06.2012 18:21

Ответ: Вопросы от новичка
 
1. Шрифт сделаешь, если кастомный шрифт делать. Правда не уверен о цвете.
2. Обычно timeScale ставят 0.00001 или подобный.

WISHMASTER35 28.06.2012 18:40

Ответ: Вопросы от новичка
 
Вот и я не знаю можно ли векторные шрифты так раскрашивать. Но скорее всего нет.
А как сделать, чтобы через GUILayout нарисовать элемент в самом низу или справа т.е. направление поменять? А то если разные скрипты рисуют в GUILayout то накладываются друг на друга( Надо по углам размещать элементы)

pax 28.06.2012 19:09

Ответ: Вопросы от новичка
 
1) гугли по ключевым словам Unity FontTool CustomFont
2) GUILayout.FlexibleSpace();

WISHMASTER35 28.06.2012 19:26

Ответ: Вопросы от новичка
 
Да я пробовал FlexibleSpace, но что-то он не работает.
Пишу так
Код:

GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUILayout.Label("Time Scale ");
Time.timeScale = GUILayout.HorizontalSlider(Time.timeScale, 0.00001f, 1, GUILayout.Width(100));
GUILayout.EndHorizontal();

И все равно с самого начала рисуется, где рисуется fps.

pax 28.06.2012 20:06

Ответ: Вопросы от новичка
 
Твой код:
PHP код:

GUILayout.BeginHorizontal(GUI.skin.box);
GUILayout.FlexibleSpace();
GUILayout.Label("Time Scale ");
Time.timeScale GUILayout.HorizontalSlider(Time.timeScale0.00001f1GUILayout.Width(100));
GUILayout.EndHorizontal(); 

Результат:

WISHMASTER35 28.06.2012 20:32

Ответ: Вопросы от новичка
 
Это ты в инспекторе нарисовал? Я в игре рисую.

pax 28.06.2012 22:53

Ответ: Вопросы от новичка
 
В игре тоже самое.

1. Прочитай мой урок - особенно раздел про меню. Змейка Scaven'а
2. Вот тебе пример:
PHP код:

void OnGUI()
{
    
GUILayout.BeginArea(new Rect(0,0,Screen.widthScreen.height));
    
GUILayout.FlexibleSpace();
    
GUILayout.BeginHorizontal(GUI.skin.box);
    
GUILayout.FlexibleSpace();
    
GUILayout.Label("Time Scale ");
    
Time.timeScale GUILayout.HorizontalSlider(Time.timeScale0.00001f1GUILayout.Width(100));
    
GUILayout.EndHorizontal();  
    
GUILayout.EndArea();




PHP код:

void OnGUI()
{
    
GUILayout.BeginArea(new Rect(00Screen.widthScreen.height));
    
GUILayout.FlexibleSpace();
    
GUILayout.BeginHorizontal();
    
GUILayout.FlexibleSpace();
    
GUILayout.Label("Time Scale ");
    
Time.timeScale GUILayout.HorizontalSlider(Time.timeScale0.00001f1GUILayout.Width(100));
    
GUILayout.EndHorizontal();  
    
GUILayout.EndArea();




PHP код:

void OnGUI()
{
    
GUILayout.BeginArea(new Rect(00Screen.widthScreen.height));
    
GUILayout.FlexibleSpace();
    
GUILayout.BeginHorizontal();
    
GUILayout.FlexibleSpace();
    
GUILayout.BeginHorizontal(GUI.skin.box);
    
GUILayout.Label("Time Scale ");
    
Time.timeScale GUILayout.HorizontalSlider(Time.timeScale0.00001f1GUILayout.Width(100));
    
GUILayout.EndHorizontal();
    
GUILayout.EndHorizontal();  
    
GUILayout.EndArea();



AntiRock 29.06.2012 11:57

Ответ: Вопросы от новичка
 
Помню как-то давно скачивал данный двиг меня он заинтересовал, делал разные сценки из деревьев, воды и т.д. Потом забросил это дело, потому что толку, что есть двиг, если кроме паскаля да vb ничего не знаешь. Вспомнил про данный двиг, да захотелось чего-нибудь создать. Хотел бы спросить, какой язык программирования лучше выучить чтобы использовать данный двиг в своих целях, какой быстрее выучить, у какого больше возможностей и т.д. И назовите какой-нибудь хоть один серьезный проект на этом двиге(под серьезным я подразумеваю, что он разрабатывался не одним человек, в нем идеальная графика, мощный ИЕ, хорошая производительность и т.д.) Стоит ли вообще учить язык программирования только чтобы начать что-то делать на этом движке?

WISHMASTER35 29.06.2012 12:38

Ответ: Вопросы от новичка
 
AntiRock, изучай шарп. Серьезный проект - nfs world.

cahekp 29.06.2012 12:46

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

какой язык программирования лучше выучить чтобы использовать данный двиг в своих целях
Лучше, конечно, C#. Будет больше возможностей.

Цитата:

какой быстрее выучить
JavaScript (UnityScript). Хотя при решении простых задач разница между C# и UnityScript минимальна. В C# в этом плане просто больше "лишнего кода".

Цитата:

назовите какой-нибудь хоть один серьезный проект
Тебе сюда: http://unity3d.com/gallery/made-with-unity/game-list
Игры AAA-класса для PC, PS3, XBox 360 на нем практически не делают. Он не конкурент CryEngine'у и UDK. По крайней мере, пока (ждем Unity3D 4.0 :)). Unity гораздо чаще используется для создания мобильных и небольших игр. В этом плане конкурентов у него практически нет.

Цитата:

Стоит ли вообще учить язык программирования только чтобы начать что-то делать на этом движке?
Если решил изучить C#, то эти знания пригодятся не только в Unity. Я бы даже сказал, Юнити несколько облегчает процесс изучения C#, опуская сложные для понимания вещи на второй план.
Если решил изучить Boo (Python), то несколько в меньшей степени, но все-таки также может пригодится знание языка за пределами Unity.
Изучать UnityScript (Java) можно, но общего с настоящей Java'ой там только синтаксис. Если потом решишь писать на чистой Java (например, для Андроид - приложений), то могут возникнуть трудности, ибо тут же придется понимать, что такое ООП, классы, наследования, методы и т.д. и т.п.

AntiRock 29.06.2012 13:00

Ответ: Вопросы от новичка
 
Спасибо за развернутый ответ. Порекомендуйте какую-нибудь книжку по JS, ту с которой вы возможно сами начали изучение, или та с которой изучение JS станет интересным занятием, надеюсь я понятно изложил. =)

AntiRock 29.06.2012 13:04

Ответ: Вопросы от новичка
 
И еще вопрос: в каком плане Unity не конкурент "КрайЭнгин"? Производительность, графика или что-то еще? В юнити вроде очень даже реалистичные сцены получаются, да и шейдеры вроде можно написать под нее, что не хуже crysis2 будет...

jimon 29.06.2012 13:13

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

Сообщение от AntiRock (Сообщение 231832)
И еще вопрос: в каком плане Unity не конкурент "КрайЭнгин"? Производительность, графика или что-то еще? В юнити вроде очень даже реалистичные сцены получаются, да и шейдеры вроде можно написать под нее, что не хуже crysis2 будет...

CryEngine Sandbox видел ? Unity еще долго до такого, а технологические возможности уже давно не главное

cahekp 30.06.2012 00:38

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

Порекомендуйте какую-нибудь книжку по JS
Ну, чтобы начать работать в Юнити, никакой книги по JS прочитывать перед этим не нужно. :) Абсолютно бесполезное занятие. Пока прочтешь книгу, писать что-либо на этом движке уже расхочется. А если и нет, то всё-равно изучать всё придется практически с нуля. Ты же писал, что Паскаль знаешь? Ну вот и всё, этого достаточно! Переменные объявляй через var имя : тип; прям как в Паскале. Главное помни, что вместо begin и end надо использовать фигурные скобки. )
В общем, я сторонник Quick Start'ов. Изучать что-то новое лучше, когда быстро пробегаешь по справке, попутно гугля непонятные места. А потом, когда уже освоишься, можно и в дебри уходить, изучая каждую мелочь.

Цитата:

в каком плане Unity не конкурент "КрайЭнгин"? Производительность, графика или что-то еще?
И в том, и в другом плане. Еще можно удобство приписать. Например, в CryEngine ландшафты представлены воксельными объектами. Можно легко делать пещеры и различные дырки прямо в редакторе. Unity такие вещи, прямо скажем, даже и не снились.
Зато у нас свои плюсы есть. Огромнейшим плюсом считаю компиляцию скриптов "на лету", полную кастомизацию интерфейса и здоровенную кросс-платформенность.

Цитата:

В юнити вроде очень даже реалистичные сцены получаются
Ну дык, ёлки, правильную атмосферу и окружение делают не движки, а прямые руки человеческие. Пример: Venus Hostage. До сих удивляюсь той красоте, которую смогли сделать на Blitz3D с древнейшим DirectX7. Хорошие движки могут несколько упростить процесс создания той самой красоты, да немного ее приукрасить. Но главное - это прямые руки. С ними и на ассемблере можно офигенные штуки мутить. Только очень, очень долго. :)

cahekp 30.06.2012 01:07

Ответ: Вопросы от новичка
 
Посоны! Нужна помощь!

Делаю систему ботов.
Требования:
- Модель состоит из меша и кучи анимированных костей
- Бот может пинать всё, что попадается ему под ноги (всякие ящики с коллайдерами + Rigidbody)
- Убил бота - он упал по рэгдольному. Стрельнул из шотгана с близкого расстояния - он красиво и по физике отлетел.
- Взависимости от того, по какой части тела попал, дается то или иное количество очков.
- Бот не может проходить сквозь стены
- Два бота не могут входить друг в друга

В общем, что делал я:
1) Через стандартный "Ragdoll Wizard" создавал коллайдеры, rigidbody и joint'ы для отдельных частей тела.
2) Для всех rigidbody делаю isKinematic равным true.
3) Стреляю по боту с помощью Physics.Raycast. Взависимости от того, по какому коллайдеру попал, даю то или иное количество очков игрокам и уменьшаю количество жизней у бота.
4) Убил бота - выключаю везде isKinematic и придаю немного силы на ту часть тела, куда был произведен последний выстрел. Всё отлично.
5) Осталось выполнить последние два пункта. Решил делать через CharacterController и метод SimpleMove. Добавляю CharacterController, настраиваю капсулу. Проверяю. Черт! Выстрел (Physics.Raycast) возвращает не часть тела, а саму капсулу. Решил тем, что поместил CharacterController на слой "IgnoreRaycast". Проверяю - теперь всё работает.
6) Использую SimpleMove. Блин! Движение какое-то беспонтовое. Дергается и практически стоит на месте. Оказывается, ему мешают коллайдеры (части тела), которые находятся внутри капсулы CharacterController'а. Отключаю коллайдеры - CharacterController перемещается нормально, но теперь не понятно, по какой части тела попадаешь.

И вот, вопрос: что можно с этим сделать? Крайне желательно все действия производить через скрипты, не давая конечному пользователю (настройщику ботов) что-то перед этим химичить и настраивать в различных Manager'ах проекта.

pax 30.06.2012 13:05

Ответ: Вопросы от новичка
 
Ну думается можно отвести один слой на то, что в нем никакая физика друг с другом не будет взаимодействовать (выключить все галочки в матрице коллизий на против этого слоя). Туда перенести колайдеры частей тела, по ним стрелять рейкастом именно по этому слою. А когда рагдол - то переносить все в дефолтный слой...

Толкать предметы можно чем-то вроде PhysicsFPSWalker или RigidbodyFPSWalker

cahekp 01.07.2012 10:22

Ответ: Вопросы от новичка
 
А можно ли как-нибудь с помощью скриптов создать / изменить / удалить слои? Чтобы пользователь перед этим вручную не отводил "один слой на то, что в нем никакая физика друг с другом не будет взаимодействовать".

pax 01.07.2012 13:43

Ответ: Вопросы от новичка
 
Cлоев всего 32 и все доступны в рантайме, просто большинство не стандартных не имеют имени (если не задать).
Матрицу коллизий в рантайме можно настраивать с помощью Physics.IgnoreLayerCollision

ИМХО найти с помощью LayerMask.LayerToName первый слой без имени и его настроить функцией, приведенной выше.

WISHMASTER35 01.07.2012 15:51

Ответ: Вопросы от новичка
 
Скачал вчера новый юнити и сразу начали вылазить ошибки
Mesh.vertices is too small. The supplied vertex array has less vertices than are referenced by the triangles array.
Mesh.uv is out of bounds. The supplied array needs to be the same size as the Mesh.vertices array.
Mesh.normals is out of bounds. The supplied array needs to be the same size as the Mesh.vertices array.
Хотя если теперь перед генерацией вызвать mesh.Clear(); то нормально все. С чего такие требования теперь?

pax 01.07.2012 15:58

Ответ: Вопросы от новичка
 
Новые оптимизации для динамических мешей, тут написано: http://unity3d.com/unity/whats-new/unity-3.5.3

WISHMASTER35 01.07.2012 16:27

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

Graphics: Added Camera.transparencySortMode to control how transparent objects are sorted. If you use a perspective camera for a 2D game, you can have proper object sorting now!
Хм. Может с помощью этого можно будет отсортировать по иерархии.

cahekp 01.07.2012 23:32

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

Сообщение от pax (Сообщение 232054)
Cлоев всего 32 и все доступны в рантайме, просто большинство не стандартных не имеют имени (если не задать).
Матрицу коллизий в рантайме можно настраивать с помощью Physics.IgnoreLayerCollision

Интересная штука. Не знал, что все 32 доступны в рантайме сразу. Спасибо.

По поводу моей задачи: пока изучал Physics.IgnoreLayerCollision, наткнулся на более простую Physics.IgnoreCollision. Этого оказалось достаточно! Даже слои не пришлось использовать. Ура!
Просто в Start'е написал:
PHP код:

CharacterController cc GetComponent<CharacterController>();
foreach (
Collider c in GetComponentsInChildren<Collider>()) {
    if (
!= ccPhysics.IgnoreCollision(ccctrue);



WISHMASTER35 02.07.2012 23:09

Ответ: Вопросы от новичка
 
Как можно сделать красивую не линейную интерполяцию? Т.е. чтобы чем ближе к 0.5 тем быстрее интерполяция.
Сейчас так написал
Код:

public static Vector2 SinLerp(Vector2 a, Vector2 b, float frame) {
                if(frame <= 0) return a;
                if(frame >= 1) return b;
                frame = Mathf.Clamp01(frame);
                frame = Mathf.Sin(frame * 90 * Mathf.Deg2Rad);
                return Vector3.Lerp(a, b, frame);
}

Но в начале оно быстро, а в конце медленно.
Вот https://dl.dropbox.com/u/55489242/Di...WebPlayer.html чтобы диаманты красиво менялись.

cahekp 02.07.2012 23:43

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

Сообщение от WISHMASTER35 (Сообщение 232164)
Вот https://dl.dropbox.com/u/55489242/Di...WebPlayer.html чтобы диаманты красиво менялись.

Прикольная штука. Мне понравилось! :super:
То, что кристаллы меняются местами по неправильной синусоиде, не заметил. Точнее заметил, но не обратил внимания. Дискомфорта не вызывает.

Цитата:

Сообщение от WISHMASTER35 (Сообщение 232164)
Как можно сделать красивую не линейную интерполяцию?

Я бы тебе посоветовал скачать абсолютно бесплатный iTween вот с этого сайта. Там каких только интерполяций нет! Вот примеры. Вещь очень полезная.

WISHMASTER35 03.07.2012 00:19

Ответ: Вопросы от новичка
 
cahekp, не, меня бесит, когда скорость в начале интерполяции намного быстрее, чем в конце. Не пойму что я не так написал. Вообще мне кажется есть попроще способы для такой интерполяции. Да и когда диамант резко меняет скорость на противоположную тоже не круто, хотя везде наверна так и есть.

Тут еще вопрос сделать при падении на другой диамант отскок диаманта или сделать, чтобы диамант немного заходил в другой и выскакивал из него.
Я кстати, вместо диамантов хочу фрукты сделать)

FREE MAN 03.07.2012 01:04

Ответ: Вопросы от новичка
 
Вопрос по поводу частиц. Как сделать так, чтобы когда камера находятся ближе к частицам они не уменьшались?

pax 03.07.2012 09:04

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

Сообщение от WISHMASTER35 (Сообщение 232164)
Как можно сделать красивую не линейную интерполяцию?

SmoothStep

Цитата:

Сообщение от Phyton (Сообщение 232173)
Вопрос по поводу частиц. Как сделать так, чтобы когда камера находятся ближе к частицам они не уменьшались?

Первое решение которое пришло на ум - рендерить частицы ортокамерой. Но это не выход наверное, т.к. условия задачи не описаны полностью)

cahekp 03.07.2012 10:49

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

Сообщение от Phyton (Сообщение 232173)
Вопрос по поводу частиц. Как сделать так, чтобы когда камера находятся ближе к частицам они не уменьшались?

Они не уменьшаются, они просто прекращают расти. :)
У частиц есть такой параметр: "Max Particle Size" (максимальный размер частицы). Находится в "Particle Renderer". По-умолчанию равен 0.25 - 0.5. Просто сделай его побольше.

FREE MAN 03.07.2012 11:51

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

Сообщение от cahekp (Сообщение 232180)
Они не уменьшаются, они просто прекращают расти. :)
У частиц есть такой параметр: "Max Particle Size" (максимальный размер частицы). Находится в "Particle Renderer". По-умолчанию равен 0.25 - 0.5. Просто сделай его побольше.

Помогло, теперь всё нормально спс:)

WISHMASTER35 03.07.2012 14:02

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

SmoothStep
Ну теперь отлично)
https://dl.dropbox.com/u/55489242/Di...WebPlayer.html

is.SarCasm 05.07.2012 18:15

Ответ: Вопросы от новичка
 
Люди помогите с сетью.
Дело в том что подключение идет в игровом лобби, а сами игроки(теми что управляют) создаются потом. Так вот, у всех подключившихся создаются игроки, но они все принадлежат серверу. (создаются игроки просто Instatiate'ом на которм лежит NetworkView). В общем суть в том что нужно на каждом клиенте установить кем управляешь ты, а кем не ты.

Lowlet 05.07.2012 21:21

Ответ: Вопросы от новичка
 
is.SarCasm, проверяй с помощью NetworkViewID.isMine

is.SarCasm 05.07.2012 21:26

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

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

Gector 06.07.2012 14:43

Ответ: Вопросы от новичка
 
У меня дурацкие вопросы:
1) Если я создал два объекта и хочу управлять одним объектом из скрипта другого - обязательно искать объект методом GameObject.Find()? Можно ли получить доступ к нем напрямую или этот метод не перебирает их? Просто после блица не хотелось бы юзать методы перебора.:-D
2) Все что находится функции Start() удаляется, а в Awake() все просто хранится?
3) MonoBehavior - это как я понял независимая от объектов логика игры (то есть правила). Как ее заюзать на JS? Пока нашел только шарп.

pax 06.07.2012 15:40

Ответ: Вопросы от новичка
 
1. Как скрипты общаются
2. Две функции выполняющиеся в разное время: Awake - при создании объекта, Start - перед первым Update.
3. Скрипты на js автоматом его наследуют (не явно).

ЗЫЖ Почитай мои уроки ;)

cahekp 06.07.2012 15:45

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

Сообщение от Gector (Сообщение 232302)
1) Если я создал два объекта и хочу управлять одним объектом из скрипта другого - обязательно искать объект методом GameObject.Find()?

Нет, конечно. ) Можно создать публичную переменную через public GameObject otherObject; и указать в ней ссылку на другой объект с помощью окна Инспектора.
Тут же ж в справке усё написано: http://docs.unity3d.com/Documentatio...e_Objects.html
Видимо, ты просто не внимательно ее прочитал.

Цитата:

Сообщение от Gector (Сообщение 232302)
2) Все что находится функции Start() удаляется, а в Awake() все просто хранится?

О_о. Ты как до этого додумался? :-D
Если не вдаваться в подробности, то всё, что в Start, выполняется позже Awake. Для более гибкой инициализации. Вот и всё.

Цитата:

Сообщение от Gector (Сообщение 232302)
3) MonoBehavior - это как я понял независимая от объектов логика игры (то есть правила). Как ее заюзать на JS? Пока нашел только шарп.

MonoBehaviour - это основа для всех твоих скриптов. Без нее не будут выполняться функции Start, Update, OnGUI... Не сможешь брать ссылки на другие компоненты, удалять игровые объекты, создавать их, и т.д... Также не сможешь использовать скрипты как компоненты, они просто не будут отображаться и добавляться в окно Инспектора.
Все Javascript'ы наследуются от MonoBehaviour по-умолчанию.


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

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