|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
25.11.2012, 17:57
|
#796
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от Nerd96
Возможно ли отключить backface culling?
|
http://docs.unity3d.com/Documentatio...lAndDepth.html
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.11.2012, 23:20
|
#797
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
А как сделать свою сериализацию? А то мои классы не сохраняются.
Т.е. я хочу вручную превращать класс в byte[] и создавать класс и byte[].
|
(Offline)
|
|
26.11.2012, 10:50
|
#798
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Ну... рефлексия + MemoryStream + BinaryWriter/BinaryReader
|
(Offline)
|
|
26.11.2012, 20:10
|
#799
|
Бывалый
Регистрация: 17.05.2009
Адрес: Днепропетровск
Сообщений: 672
Написано 180 полезных сообщений (для 428 пользователей)
|
Ответ: Вопросы от новичка
Как связать два Toggle, то есть как радио баттон: один включаешь, другой выключается?
|
(Offline)
|
|
26.11.2012, 20:29
|
#800
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от is.SarCasm
Как связать два Toggle, то есть как радио баттон: один включаешь, другой выключается?
|
Если текущий поменял значение на true, - пройти по всем кроме текущего и поменять им на false
|
(Offline)
|
|
26.11.2012, 20:53
|
#801
|
Бывалый
Регистрация: 17.05.2009
Адрес: Днепропетровск
Сообщений: 672
Написано 180 полезных сообщений (для 428 пользователей)
|
Ответ: Вопросы от новичка
Как решить проблему с тем что в телефонах высота экрана больше ширины? То есть на компьютере удобней отображать так, а на телефоне всё повернуть( в том числе и ГУИ же)
|
(Offline)
|
|
26.11.2012, 21:37
|
#802
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Ничего поворачивать не надо, при билде сам выбираешь landskape или portrait. Просто привязать GUI к краям/углам экрана. Конечно можно делать 2 GUI.
|
(Offline)
|
|
26.11.2012, 22:47
|
#803
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от pax
Ну... рефлексия + MemoryStream + BinaryWriter/BinaryReader
|
Т.е. вручную рекурсивно получать все public или сериализрванные поля, определять их тип\размер и записывать? Что-то сложно. Должен быть свой сериализатор. В java такой сериализатор точно есть, но его почему-то не любят.
|
(Offline)
|
|
27.11.2012, 01:35
|
#804
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Не знаю какой сериализатор в юнити, но System.Runtime.Serialization отлично сохраняет и восстанавливает классы не зная их типа.
В Unity сохраняется только по типу ссылки. Т.е. если ссылка MonoBehaviour, то ни черта не сохранит, даже если в эту ссылку будет записан объект с кучей инфы(
Пример просто на C#, но надеюсь Mono тоже поддерживает.
private static byte[] Serialize(object obj)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
bf.Serialize(stream, obj);
stream.Close();
return stream.ToArray();
}
private static object Deserialize(byte[] array)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream stream = new MemoryStream(array);
object obj = bf.Deserialize(stream);
stream.Close();
return obj;
}
Только, если десириализацию(восстановление) делать в OnEnable можно, то когда сериализацию делать? Проверять в Editor'е, если объект Dirty, то сохранить его?
|
(Offline)
|
|
27.11.2012, 07:15
|
#805
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Mono поддерживает, но оно не применимо к объектам Unity. Ни одной ссылки на ресурсы в рантайме сохранить если явно не знать как получить объект из ресурса. К тому же как сохранять и восстанавливать компоненты, которые добавляются через AddComponent() и GetComponent()? Так что только вручную и с помощью своего менеджера ресурсов, "знающего" как воссоздать тот или иной объект (хранящий пути для Resource.Load или непосредственно ссылки на объекты) и "знающий", какой объект как создан (т.е. вероятнее всего придется либо создавать все объекты и через этот менеджер, либо на объекты вешать специальный компонент, содержащий информацию для сериализации).
Последний раз редактировалось pax, 27.11.2012 в 09:39.
|
(Offline)
|
|
27.11.2012, 20:41
|
#806
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Забыл написать, у меня задача проще. Мои классы - не скрипты.
Если помнишь я делал свой MineCraft. Там есть два типа блоков: Cube и Cross(трава). Оба они наследуют один класс Block. Но списки сейчас приходится делать для каждого типа. Вот хочу, чтобы хватало одного List<Block> blockSet.
Хотя, наверно было бы лучше использовать XML, но я так и не разобрался как для него делать инспектор. Если инспектор для TextAsset сделать, то он будет для всех левых форматов.
И еще не понятно как в XML хранить путь к объектам\ассетам. Наверно можно хранить их ID, а сами объекты хранить в папке Resources. Или напрямую пусть к файлу.
Просто еще хочется сделать, чтобы BlockSet с текстурами мог грузится из проекта и из вне проекта.
|
(Offline)
|
|
28.11.2012, 14:01
|
#807
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
|
(Offline)
|
|
01.12.2012, 09:14
|
#808
|
ПроЭктировщик
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений (для 64 пользователей)
|
Ответ: Вопросы от новичка
Всем привет! Возник такой вопрос. Как сделать круглый бесконечный рандомный тоннель. Под рандомностью понимается смещение центра окружности. Видно на скриншотах. Я могу нарисовать окружность и смещать его центр относительно какой то величины рандомом. Но как формировать поверхность между 1-ой и второй окружностью.
Спасибо за внимание.
|
(Offline)
|
|
01.12.2012, 10:32
|
#809
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопросы от новичка
http://blog.nobel-joergensen.com/201...mesh-in-unity/
http://gamesmaker.ru/programming/dir...trianglestrip/
Окружность - многоугольник с огромным числом рёбер(векторное представление)
А потом что-то типо такого:
public int SegmentCount=8; public Vector3[] Centers={new Vector3(0,0,0)}; public float Distance=1f;
void Make(){
MeshFilter meshFilter = GetComponent(); if (meshFilter==null){ Debug.LogError("MeshFilter not found!"); return; }
Vector3[] v = new Vector3[SegmentCount*Centers.Lenght]; int[] t=new int[SegmentCount*(Centers.Lenght-1)*3]; for(int j=0;j<Centers.Lenght;j++){ for(int i=0;i<SegmentCount;i++) { v[i+SegmentCount*j]= Centers[j] + new Vector(j*Distance,Mathf.Sin((i*360f*Mathf.GradToDeg)/SegmentCount),Mathf.Cos((i*360f*Mathf.GradToDeg)/SegmentCount)); //тут нужно придумать удобное заполнение массива треугольников } } //не уверен что будет нормально работать Mesh mesh = meshFilter.sharedMesh; mesh.Clear();
mesh.vertices = v; mesh.triangles = t;
mesh.RecalculateNormals(); mesh.RecalculateBounds(); mesh.Optimize(); }
|
(Offline)
|
|
02.12.2012, 00:08
|
#810
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Интересно ваше мнение. Если нужно сделать GUI с анимационными кнопка, красивой сменой экранов(допустим, чтобы одни элементы улетали в одну сторону, а с другой стороны прилетали другие) и подобными эффектами, то как лучше сделать такое?
Я сейчас для каждого элемента делаю свой GameObject и на нем проигрывал анимации или просто смещаю его, а сам элемент рисуется, через GUILayout, но смещается\масштабируется в зависит от трансформации.
Но GameObject для каждого элемента не супер. Как бы вы это сделали?
public enum ScaleType {
ByWidth,
ByHeight,
ByWidthAndHeight,
ByAverageSize,
ByMinSize,
ByMaxSize
}
public abstract class GUIComponent : MonoBehaviour {
[SerializeField] private ScaleType scaleType = ScaleType.ByAverageSize;
[SerializeField] private float scale = 50;
[SerializeField] private float border = 5;
protected bool pressedDown = false;
private bool process = false;
public abstract bool Draw();
protected virtual void Update() {
if(pressedDown) process = true;
}
protected Rect GetRect(GUIContent content) {
float borderX = border * GetScaleX() / 100f;
float borderY = border * GetScaleY() / 100f;
Vector2 size = GUI.skin.button.CalcSize(content);
float aspect = size.x/size.y;
if(scaleType == ScaleType.ByWidthAndHeight) aspect = 1f;
float w = GetScaleX() * scale / 100f * aspect;
float h = GetScaleY() * scale / 100f;
Rect rect = GUILayoutUtility.GetRect( w+borderX*2, h+borderY*2, GUILayout.ExpandWidth(false) );
rect.x += borderX;
rect.y += borderY;
rect.width -= borderX*2;
rect.height -= borderY*2;
Vector2 center = rect.center;
rect.width *= transform.lossyScale.x;
rect.height *= transform.lossyScale.y;
rect.center = center;
return rect;
}
private float GetScaleX() {
switch(scaleType) {
case ScaleType.ByWidth : return Screen.width;
case ScaleType.ByHeight : return Screen.height;
case ScaleType.ByAverageSize : return (Screen.width+Screen.height)/2f;
case ScaleType.ByMinSize : return Mathf.Min(Screen.width, Screen.height);
case ScaleType.ByMaxSize : return Mathf.Max(Screen.width, Screen.height);
case ScaleType.ByWidthAndHeight : return Screen.width;
}
return 0f;
}
private float GetScaleY() {
switch(scaleType) {
case ScaleType.ByWidth : return Screen.width;
case ScaleType.ByHeight : return Screen.height;
case ScaleType.ByAverageSize : return (Screen.width+Screen.height)/2f;
case ScaleType.ByMinSize : return Mathf.Min(Screen.width, Screen.height);
case ScaleType.ByMaxSize : return Mathf.Max(Screen.width, Screen.height);
case ScaleType.ByWidthAndHeight : return Screen.height;
}
return 0f;
}
public bool IsPressedDown() {
return pressedDown;
}
public bool IsProcess() {
bool end = process && !animation.isPlaying;
if(end) process = false;
return end;
}
}
public class GUIButton : GUIComponent {
public string text;
public override bool Draw() {
Rect rect = GetRect( new GUIContent(text) );
return pressedDown = GUI.Button(rect, text);
}
}
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:35.
|