Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 21.01.2013, 13:44   #1096
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Нужно нарисовать N картинок в ряд. Для этого я сразу же выделяю большой квадрат под все картинки. Если под каждую выделять, то между ними могут получится пробелы.
Выделяю так GUILayoutUtility.GetRect(items.Length*64, 64);
Но вот проблема при шести картинках выделяется большая область и инспектор уходит под полосу прокрутки.
Вот не пойму как выделить rect, чтобы он был не шире окна+полосы прокрутки, и не выше, Чем 64?
Вчера провозился, но либо items.Length == 6 лезет под полосу, либо при items.Length < 6 высота картинок очень большая. Еще и хотелось бы, чтобы эти картинки рисовались по среди окна, но GUILayout.FlexibleSpace() сжимает их до нулевого размера.
(Offline)
 
Ответить с цитированием
Старый 21.01.2013, 14:46   #1097
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Вопросы от новичка

2- тяжелый случай, требуется запоминать положение и состояние объектов на сцене и при загрузке их полностью восстанавливать для продолжения игры с текущего момента.
Вот приличное решение:
http://whydoidoit.com/unityserializer/
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (21.01.2013)
Старый 21.01.2013, 20:47   #1098
mauNgerS
Разработчик
 
Аватар для mauNgerS
 
Регистрация: 10.10.2008
Сообщений: 501
Написано 258 полезных сообщений
(для 670 пользователей)
Ответ: Вопросы от новичка

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

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;

Что не верно?
Как можно вывернуть нормали у анимированной модели?
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 1379
Размер:	171.5 Кб
ID:	18511  
__________________
(Offline)
 
Ответить с цитированием
Старый 21.01.2013, 20:52   #1099
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Попробуй так:

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

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mauNgerS (21.01.2013)
Старый 21.01.2013, 22:01   #1100
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Отчасти разобрался со своим прошлыми вопросом.
Вот так все работает. Квадрат не уходит под полосу прокрутки, высотой не превышает 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 задавал, то понятно.
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 01:56   #1101
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Снова похожая проблема. Toolbar не умещается и растягивает весь инспектор.
Можно сделать, чтобы он не растягивал gui?
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 1119
Размер:	79.9 Кб
ID:	18512  
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 09:10   #1102
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Ты наверняка задал им фиксированную или минимальную ширину, они бы поместились. А так - выдели область по высоте и рисуй с помощью GUI, тогда лайоут не испортишь, либо скролл добавь.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 15:46   #1103
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Так работает)
Rect rect = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.button, GUILayout.MaxWidth(64*items.Length));
return GUI.Toolbar(rect, selected, items, GUI.skin.button);
Но это похоже на баг ибо какой толк растягивать gui, если оно будет скрыто под полосой.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 1187
Размер:	83.3 Кб
ID:	18519  
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 17:25   #1104
cahekp
Разработчик
 
Аватар для cahekp
 
Регистрация: 14.12.2008
Адрес: Томск
Сообщений: 530
Написано 270 полезных сообщений
(для 883 пользователей)
Ответ: Вопросы от новичка

Привет всем!
Изучаю встроенную сеть в 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);
}
}
, то тогда новый подключенный клиент видит "убитый" объект. То есть, он создается, но не удаляется.

Тоже не то. Как тогда надо писать?
__________________
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 18:08   #1105
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

А при создании не проще пользоваться Network.Instantiate ?
А в остальном я мало имею опыта с Unity сетью, Photon Unity Networking создает объекты сам и удаляет тоже.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 19:12   #1106
cahekp
Разработчик
 
Аватар для cahekp
 
Регистрация: 14.12.2008
Адрес: Томск
Сообщений: 530
Написано 270 полезных сообщений
(для 883 пользователей)
Ответ: Вопросы от новичка

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

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

Пипец, хоть свою систему RPC-буферов с нормальным редактированием пиши! На кой черт она тогда нужна в Unity?
__________________
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 19:50   #1107
pie
ПроЭктировщик
 
Аватар для pie
 
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений
(для 64 пользователей)
Ответ: Вопросы от новичка

Всем привет! Пытаюсь сделать фуллскрин используя масштаб. Но что-то не то. По стандарту разрешение 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 равны одному. Я в замешательстве.
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 19:57   #1108
pie
ПроЭктировщик
 
Аватар для pie
 
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений
(для 64 пользователей)
Ответ: Вопросы от новичка

Оу. Я разобрался. В конце нужно цифр нужно было просто поставить f.
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 20:11   #1109
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

Это поразительно, но так все работает
GUILayout.Toolbar(selected, items, GUILayout.MinWidth(0))
Вообще не представляю как тут GUILayout.MinWidth(0) может помогает)) Странное у них GUI.
Иначе GUI растянется даже за пределы экрана, не говоря уже о полосе прокрутки, но это только когда рисуется полоса прокрутки.
(Offline)
 
Ответить с цитированием
Старый 22.01.2013, 23:57   #1110
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com