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)

WISHMASTER35 21.01.2013 13:44

Ответ: Вопросы от новичка
 
Нужно нарисовать N картинок в ряд. Для этого я сразу же выделяю большой квадрат под все картинки. Если под каждую выделять, то между ними могут получится пробелы.
Выделяю так GUILayoutUtility.GetRect(items.Length*64, 64);
Но вот проблема при шести картинках выделяется большая область и инспектор уходит под полосу прокрутки.
Вот не пойму как выделить rect, чтобы он был не шире окна+полосы прокрутки, и не выше, Чем 64?
Вчера провозился, но либо items.Length == 6 лезет под полосу, либо при items.Length < 6 высота картинок очень большая. Еще и хотелось бы, чтобы эти картинки рисовались по среди окна, но GUILayout.FlexibleSpace() сжимает их до нулевого размера.

seaman 21.01.2013 14:46

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

2- тяжелый случай, требуется запоминать положение и состояние объектов на сцене и при загрузке их полностью восстанавливать для продолжения игры с текущего момента.
Вот приличное решение:
http://whydoidoit.com/unityserializer/

mauNgerS 21.01.2013 20:47

Ответ: Вопросы от новичка
 
Вложений: 1
На объект с именем 1 повешан скрипт следующего содержания:

PHP код:

using UnityEngine;
using System.Collections;

public class 
FlipNormal MonoBehaviour {
    
    
void Start () {
    
        
Mesh m GetComponent<MeshFilter>().mesh;
        
        
Vector3[] normals m.normals;
        for (
int i=0normals.Lengthi++) 
        {    
            
normals[i] = new Vector3(normals[i].x*(-1),normals[i].y*(-1),normals[i].z*(-1));
        }
        
m.normals normals;
    }


Цель у объекта 1 добратся до меша и вывернуть нормали.
Ошибка: NullReferenceException: Object reference not set to an instance of an object
FlipNormal.Start () (at Assets/Scripts/FlipNormal.cs:10)
на строке Mesh m = GetComponent<MeshFilter>().mesh;

Что не верно?
Как можно вывернуть нормали у анимированной модели?

pax 21.01.2013 20:52

Ответ: Вопросы от новичка
 
Попробуй так:

PHP код:

using UnityEngine;
using System.Collections;

public class 
FlipNormal MonoBehaviour {
    
    
void Start () {
            var 
smr GetComponent<SkinnedMeshRenderer>();
        
Mesh m =(MeshInstantiate(smr.sharedMesh);
        
smr.sharedMesh m;
        
Vector3[] normals m.normals;
        for (
int i=0normals.Lengthi++) 
        {    
            
normals[i] = -normals[i] ;
        }
        
m.normals normals;
    }



WISHMASTER35 21.01.2013 22:01

Ответ: Вопросы от новичка
 
Отчасти разобрался со своим прошлыми вопросом.
Вот так все работает. Квадрат не уходит под полосу прокрутки, высотой не превышает 64 и размещен по средине, если меньше ширины окна.
Код:

GUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
Rect bigRect = GUILayoutUtility.GetAspectRect( items.Length, GUILayout.MaxWidth(64*items.Length) );
GUILayout.FlexibleSpace();
}
GUILayout.EndHorizontal();

Только не пойму как тут работает GUILayout.MaxWidth(64*items.Length) ?
Если без него, то FlexibleSpace сожмут квадрат с обеих сторон до нулевого размера.
Если бы MinWidth задавал, то понятно.

WISHMASTER35 22.01.2013 01:56

Ответ: Вопросы от новичка
 
Вложений: 1
Снова похожая проблема. Toolbar не умещается и растягивает весь инспектор.
Можно сделать, чтобы он не растягивал gui?

pax 22.01.2013 09:10

Ответ: Вопросы от новичка
 
Ты наверняка задал им фиксированную или минимальную ширину, они бы поместились. А так - выдели область по высоте и рисуй с помощью GUI, тогда лайоут не испортишь, либо скролл добавь.

WISHMASTER35 22.01.2013 15:46

Ответ: Вопросы от новичка
 
Вложений: 1
Так работает)
Код:

Rect rect = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.button, GUILayout.MaxWidth(64*items.Length));
return GUI.Toolbar(rect, selected, items, GUI.skin.button);

Но это похоже на баг ибо какой толк растягивать gui, если оно будет скрыто под полосой.

cahekp 22.01.2013 17:25

Ответ: Вопросы от новичка
 
Привет всем!
Изучаю встроенную сеть в Unity3D. Возник тут очень мучающий меня вопрос.
Как правильно инстанцировать и удалять объект по сети?

Создаю сейчас объект так: networkView.RPC("Spawn", RPCMode.AllBuffered, AllocateViewID());
Удаляю так: networkView.RPC("Destroy", RPCMode.AllBuffered, viewID);
Тела функций:
[RPC]
void Spawn(NetworkViewID viewID) {
GameObject go = Instantiate(someObj, pos, rot) as GameObject;
go.networkView.viewID = viewID;
}

[RPC]
void Destroy(NetworkViewID viewID) {
Network.RemoveRPCs(viewID);
Network.Destroy(viewID);
}

Но! Это неправильно. Если делать так, то при вызове этой функции у клиента, сервер получает ошибки:
View ID AllocatedID: XXX not found during lookup. Strange behaviour may occur.
Couldn't destroy object because the associate network view was not found
Если же вызвать это на сервере, то такую же ошибку получит клиент.

Если же написать так:
void Destroy(NetworkViewID viewID) {
if (viewID.isMine) {
Network.RemoveRPCs(viewID);
Network.Destroy(viewID);
}
}
, то тогда новый подключенный клиент видит "убитый" объект. То есть, он создается, но не удаляется.

Тоже не то. Как тогда надо писать?

pax 22.01.2013 18:08

Ответ: Вопросы от новичка
 
А при создании не проще пользоваться Network.Instantiate ?
А в остальном я мало имею опыта с Unity сетью, Photon Unity Networking создает объекты сам и удаляет тоже.

cahekp 22.01.2013 19:12

Ответ: Вопросы от новичка
 
Да вот, как оказалось, не проще.
Network.Instantiate записывается в RPC-буфер не конкретного NetworkViewID, а самого NetworkPlayer'а. В результате чего, чтобы удалить потом этот объект из сети (при этом, чтобы у новых подключившихся игроков этот объект не создавался), придется либо очищать весь RPC-буфер игрока (а не какого-то NetworkViewID, что было бы более приятней), либо добавлять еще один дополнительный NetworkViewID, чтобы он этот объект "доубивал" при его создании на новых подключенных клиентах.

Короче, очень, очень плохо, что в Unity3D нельзя смотреть и редактировать RPC-буфер любого NetworkViewID и NetworkPlayer'ов. Только глобально очищать.

Пипец, хоть свою систему RPC-буферов с нормальным редактированием пиши! На кой черт она тогда нужна в Unity?

pie 22.01.2013 19:50

Ответ: Вопросы от новичка
 
Всем привет! Пытаюсь сделать фуллскрин используя масштаб. Но что-то не то. По стандарту разрешение 807х570. Разрешение в фуллскрине 1366х768 (в моем случае). У билда выставил разрешение экрана 1366х768. Дальше читаю масштаб:
Код:

float size_width = Screen.width / 807;
float size_height = Screen.height / 570;

Применяю его к Rect. Для информативности вывожу в дебаг слудующую информацию:
Код:

Debug.Log ("size_width: " + size_width + "; size_heigh: " + size_height);
В дебаг выводит что size_width и size_heigh равны одному. Я в замешательстве. :4to:

pie 22.01.2013 19:57

Ответ: Вопросы от новичка
 
Оу. Я разобрался. В конце нужно цифр нужно было просто поставить f.

WISHMASTER35 22.01.2013 20:11

Ответ: Вопросы от новичка
 
Это поразительно, но так все работает
GUILayout.Toolbar(selected, items, GUILayout.MinWidth(0))
Вообще не представляю как тут GUILayout.MinWidth(0) может помогает)) Странное у них GUI.
Иначе GUI растянется даже за пределы экрана, не говоря уже о полосе прокрутки, но это только когда рисуется полоса прокрутки.

WISHMASTER35 22.01.2013 23:57

Ответ: Вопросы от новичка
 
Кто-нибудь пользовался классом DragAndDrop?
Не пойму как сделать, чтобы с чужих окон нельзя было перетаскивать объекты в мое окно?
А так же я так понимаю вызывать DragAndDrop.StartDrag нужно в событии MouseDrag. Но не пойму нужно ли и как проверить, что уже Drag уже начался?


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

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