Есть 2го один дочерний. получаю трансформ дочернего. tr = GetComponentInChildren<Transform>(); Так здесь я разобрался tr = gameObject.transform.FindChild("AnimatedSprite");
смещаю, тк при смени анимации позиция го смещается.
tr.position = new Vector3(-0.22f, 0f, 0f); теперь здесь не понятки, я ставлю =, почему тогда го продолжает смещаться как если бы я написал: tr.position += new Vector3(-0.22f, 0f, 0f); Почему я же корректно прошу поставить в позицию(-0.22f, 0f, 0f) и все.
Добавлено (30.11.2012, 20:28) --------------------------------------------- Еще заметил глюк или что то вроде того.
horDirection = Input.GetAxis("Horizontal"); if (horDirection == 0f) {
if (anim.GetCurrentClipName() != "Idle_Stay") { tr.localPosition = new Vector3(-0.1654987f, -0.13286f, 0f); if( tr.localPosition == new Vector3(-0.1654987f, -0.13286f, 0f)) anim.Play("Idle_Stay");
} } Debug.Log(horDirection); if (horDirection > 0) { if (anim.isPlaying()) if (anim.GetCurrentClipName() != "Walk") { tr.localPosition = new Vector3(-0.235f, -0.13286f, 0f); if( tr.localPosition ==new Vector3(-0.235f, -0.13286f, 0f)) anim.Play("Walk");
} }
Влюбом случае возникает дерганье, как будто смещение не происходит сразу. Может кто сталкивался? как это вылечить?
Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Сообщение отредактировал Kira - Пятница, 30 Ноября 2012, 17:53
Помогите пожалуйста пытаюсь сделать путь ai. Появилась такая идея сделать плоскость на всю карту и на нее повесить скрипт который бы вырезал бы в места в которых происходит соприкосновения с другими объектами. А потом превращался в "дорожку". По которой может ступать ai. Единственное я не знаю команду которая бы превращала бы плоскость в путь такой как в Navigation, не кто не подскажет?.
Limonchik, чего то я вас все с трудом понимаю. Я 4ку даже не смотрел. Пути делаются вейнпоинтами. Ты думаешь это так просто? посмотри сколько такая штучка стоит PathEngine Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Подскажите тогда как сделать легче всего сделать так чтобы за мной гонялся монстр обходя все приветствия. Ai у меня есть. А как заставить ходить обходя приветствия я не знаю.
Подскажите тогда как сделать легче всего сделать так чтобы за мной гонялся монстр обходя все приветствия. Ai у меня есть. А как заставить ходить обходя приветствия я не знаю.
Кидай луч вперед монстра и проверяй - если есть препятствие, то обходи, если нету, то иди дальше. Долгожданный анонсик: State of War
Как изменить цвет гуевской текстуры при потребности?
Если я правильно тебя понял, то
Code
guiTexture.color=new Color(0.5f,0.5f,0.5f,0.5f); //стандартный цвет guiTexture.color=new Color(1f,0f,0f,0.5f); //красный, к примеру guiTexture.color=new Color(1f,0f,1f,0.5f); //смесь красного и синего //и другие. Ну, ты понял, я думаю
Knight1032, еще можно так Color.red; Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Помогите пожалуйста разобраться http://www.arongranberg.com/unity/a-pathfinding/ это я так понял эта та функция работает на free версии. Она прорисует путь Ai . Подскажите как пользоваться.
Limonchik, да, но и про стоит не дорого. Весьма интересно. Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Limonchik, может и не должно быть? ты уверен что должно быть? Попробуй поместить тот скрипт где у тебя компонент, в папку Editor. Или на го где должен быть этот компонент, GetComponent<Pathfinding>(); Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Есть огромный 40 на 40 км мир, поделенный на 64 куска(по 5 на 5 соответственно). Возникает несколько вопросов: 1) Действительно ли фог помогает в оптимизации или ещё больше грузит комп. 2) Как решить проблему, когда начиная рисовать траву через некоторое время она из некоторых мест пропадает, и там ровные квадраты с прямыми углами получаются. 3) Как лучше делать террейн? В самой юньке или в самой юньке а потом експортуть в модель, но тогда мультитекстуринг не возможен, как я понимаю. 4) Какие пути для оптимизации леса и растительности( а то уж слишком трава перегружает компьютер) вы знаете? 5) Ну и если подгружать территорию по чанкам, то будет ли заметный выйграш в производительности? Да, я программист, дизайнер, сценарист, Я сам себе издатель и сам себе игрок...
1) как сделать, обычно фог перекрывает и делает не видимым, следовательно можно обрезать. 2) Не понятно. 3)Это зависит от нужд, терейн был придуман для экономии ресурсов. При отдалении уменьшается детализации, а там где камера она увеличивается. 4) Ну правильно спроектировать, отсечение невидимых объектов. 5) Да, опять таки зависит от реализации и требования, может случиться так , что это наоборот только понизит ее.
С играйте в Обливион на разных настройках, и присмотритесь. Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
но тогда мультитекстуринг не возможен, как я понимаю.
Ты под этим словом понимаешь наложение нескольких текстур? Если да, то возможен, причем удобный, но поддерживает максимум 4 текстуры. Это специальный шейдер, который накладывает текстуры по цвету. Т.е. основную текстуру ты рисуешь хоть в пэинте в палитре RGB(ну и используя только эти три цвета, соответственно+черный), а затем в материале настраиваешь для каждого цвета текстуру, и вместо цветного террейна у тебя получается вполне себе затекстуренный. Если нужно подробней - расскажу.
P.S.: хотя, наверное, можно сделать и больше цветов, если ещё зарезервировать промежуточные (Желтый, фиолетовый, голубой, да и много их как бы, вся палитра RGB), но тогда будет не очень удобно, и плавный переход из одной текстуры в другую будет всё менее плавным(впрочем, до 10 разных цветов такой проблемы возникать не должно, но работать с большим количеством цветом будет не очень удобно). Долгожданный анонсик: State of War
Сообщение отредактировал EchoIT - Понедельник, 03 Декабря 2012, 19:13
Всем здрасьте) Прошу объясните мне, как используется GUISkin, его предназначение, а то сколько инфы не перечитал, не понял... Вот почему в данном скрипте:
/// <summary> /// Player bar display. /// Выводит на экран бары игрока /// Вешать на игрока /// </summary> using UnityEngine; using System.Collections;
public class PlayerBarDisplay : MonoBehaviour { //playerBar разделительные линии панели здоровья и маны //HealthBar полоса здоровья игрока //ManaBar Полоса маны игрока //Bar фон панели public GUISkin mySkin; // Скин где хранятся текстуры баров public PlayerStats Char; // Объект на котором висят статы public bool Visible = true; //Видимость бара
// Use this for initialization void Start () {
}
void OnGUI () { if(Visible) { //назначаем mySkin текущим скином для GUI GUI.skin = mySkin; //получаем переменную PlayerSt компонент PlayerStats //В инспекторе в Unity нужно указать на игрока PlayerStats PlayerSt = (PlayerStats)Char.GetComponent("PlayerStats"); //получаем значения float MaxHealth = (float)PlayerSt.MaxHealth; float CurHealth = (float)PlayerSt.CurHealth; float MaxMana = (float)PlayerSt.MaxMana; float CurMana = (float)PlayerSt.CurMana; //расчитываем коэффицент длинны полосы здоровья float HealthBarLen = CurHealth/MaxHealth; //если умножить на сто то будут проценты //расчитываем коэффицент длинны полосы маны float ManaBarLen = CurMana/MaxMana; //если умножить на сто то будут проценты
//рисуем общий фон панели здоровья и маны GUI.Box(new Rect(10,10,254,64), " ", GUI.skin.GetStyle("Bar"));
//полоса здоровья игрока GUI.Box(new Rect(10,10,254*HealthBarLen,64), " ", GUI.skin.GetStyle("HealthBar")); //полоса маны игрока GUI.Box(new Rect(10,10,254*ManaBarLen,64), " ", GUI.skin.GetStyle("ManaBar"));
//рисуем разделительные линии панели здоровья и маны GUI.Box(new Rect(10,10,254,64), " ", GUI.skin.GetStyle("PlayerBar"));
} }
// Update is called once per frame void Update () {
} }
(ССЫЛКА НА ВИДЕО СО СКРИПТОМ) ... Вот как здесь ГУИ.скин используется? А еще я сделал вот такую Лэйбл: , но меня это не устраевает, т.к. скрипт очень громоздкий и неграмотный:
using UnityEngine; using System.Collections;
public class stats : MonoBehaviour { string char_name = "Eye-in-The-Sky"; float char_level = 23; float char_armor = 1023; float char_hp = 1001; float char_mana = 201; string char_damage = "57-64"; float char_agility = 101; float char_exp = 7253; float char_int = 32; float char_shells = 444; float char_spirit = 67; float char_dodge = 23; float char_block_rate = 41; float char_critical_rate = 18; string char_class = "Warrior"; string char_spec = "Tank"; string char_guild = "-=GERODIAN-="; float exp_cost = 16; Color color_4; public string spec_phr; public Texture2D tooltip; public string add_level; public Texture2D laste01; public Texture2D inc; public string phr_def; public string phr_dmg; public string phr_guild; public string phr_exp; public string phr_curr; public string phr_hp; public string phr_mana; Color color; public string phr_agil; public string phr_int; public string phr_block; public string phr_crit; public string phr_spirit; public Texture2D menu_char_img_hover; public string phr_dodge; public string info_buy; public Texture2D separaror; public Texture2D shell; public string phr_title_2; public string phr_err_shell; public Texture2D menu_char_img; public Texture2D purchase; float level_cost = 194; GUIStyle style_1; GUIStyle style_2; GUIStyle style_3; GUIStyle style_4; GUIStyle style_5; GUIStyle style_6; GUIStyle style_7; public bool char_menu = false; // Use this for initialization void Start () {
} void OnGUI(){ if (GUI.Button (new Rect (Screen.width - 100,Screen.height - 50,30,30),menu_char_img,"")){ if(!char_menu) { char_menu = true; }else{ char_menu = false; }}
if (char_menu){ GUIStyle style_1 = new GUIStyle(); GUIStyle style_2 = new GUIStyle(); GUIStyle style_3 =new GUIStyle(); GUIStyle style_4 = new GUIStyle(); GUIStyle style_5 = new GUIStyle(); GUIStyle style_6 = new GUIStyle(); GUIStyle style_7 = new GUIStyle(); color = new Color32(0, 144,255, 255); color_4 = new Color32 (64,255,26,255);
style_1.normal.textColor = Color.white; style_1.fontSize = 17; style_2.normal.textColor = Color.yellow; style_2.fontSize = 17; style_3.normal.textColor = color; style_3.fontSize = 17; style_4.normal.textColor = color_4; style_4.fontStyle = FontStyle.Bold; style_5.normal.textColor = Color.blue; style_6.normal.textColor = Color.red; style_7.fontStyle = FontStyle.Bold; style_7.normal.textColor = Color.white; GUI.Label (new Rect(10,10,400,900),tooltip); GUI.Label (new Rect (20,20,400,20),char_name,style_3); GUI.Label (new Rect (20,40,70,20),char_class,style_2); GUI.Label (new Rect (80,40,105,20),char_level+add_level,style_1); GUI.Label (new Rect (80,40,105,20),char_level+add_level,style_1);
GUI.Label (new Rect (20,75,140,20),phr_guild,style_4); GUI.Label (new Rect (20,90,105,20),phr_def,style_4); GUI.Label (new Rect (20,105,105,20),phr_dmg,style_4); GUI.Label (new Rect (20,120,105,20),phr_exp,style_4); GUI.Label (new Rect (20,135,105,20),phr_hp,style_4); GUI.Label (new Rect (20,151,105,20),phr_mana,style_4); GUI.Label (new Rect (70,75,140,20), ": " +char_guild); GUI.Label (new Rect (70,90,140,20), ": " +char_armor); GUI.Label (new Rect (70,105,140,20), ": " +char_damage); GUI.Label (new Rect (70,120,140,20), ": " +char_exp); if (char_shells > exp_cost){ if (GUI.Button (new Rect (108,123,30,30),inc,"")) {
char_exp += 29; char_shells -= exp_cost;
} } GUI.Label (new Rect (70,135,140,20), ": " +char_hp); GUI.Label (new Rect (70,150,140,20), ": " +char_mana); GUI.Label (new Rect (200,30,20,200),separaror); GUI.Label (new Rect (230,20,300,45),phr_title_2,style_7); GUI.Label (new Rect (230,40,300,45),laste01); GUI.Label (new Rect (215,90,80,45),phr_agil,style_4); GUI.Label (new Rect (215,105,80,45),phr_int,style_4); GUI.Label (new Rect (215,120,80,45),phr_crit,style_4); GUI.Label (new Rect (215,135,80,45),phr_block,style_4); GUI.Label (new Rect (215,150,80,45),phr_spirit,style_4); GUI.Label (new Rect (295,90,140,20), ": " +char_agility); GUI.Label (new Rect (295,105,140,20), ": " +char_int); GUI.Label (new Rect (295,120,140,20), ": " +char_critical_rate+"%"); GUI.Label (new Rect (295,135,140,20), ": " +char_block_rate + "%"); GUI.Label (new Rect (295,150,140,20), ": " +char_spirit); GUI.Label (new Rect (20,190,160,20),spec_phr + ": " +char_spec); GUI.Label (new Rect (300,193,50,20),phr_curr + ": ",style_5); GUI.Label (new Rect (345,190,75,50),shell); GUI.Label (new Rect (364,190,75,50),char_shells.ToString ()); if (char_shells > level_cost){ if (GUI.Button (new Rect (20,170,150,50),purchase,"")){ char_level += 1; char_shells -= level_cost;
} } } }
// Update is called once per frame void Update () {
} }
как можно его записать по компактнее? Очень прошу ответа на мои идиотские вопросы... Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
Omlette, вы не написали всего вопроса. Гуи скин, это скин. Как виндовсе так и в программках например winamp. Создайте свой скин, и поменяйте там изображения кнопок, баров, меток итп. GUI.Box(new Rect(10,10,254,64), " ", GUI.skin.GetStyle("Bar")); Использует настройки скина, по имени бар. Можно также создавать костомные скины. Не понимаю чего вы не понимаете?
по поводу кода, это вот обязательно делать так? Выводить кучу переменных? Во первых раздели все по функциям. Например: Void PrintString() { что то делаем, например рисуем все гуишки. }
Если тебе надо распечатать строка за строкой вот пример кода, который можно модифицировать.
Code
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class NextStringer { Rect nxRect; List<string> str = new List<string>(); float y;
nxRect = rect; y = nxRect.y; } public void AddString(string str) { this.str.Add(str); } public void Print() { string[] str = this.str.ToArray();
PrintString(str); } void PrintString(string[] str) { nxRect.y = y; for (int i = 0; i < str.Length; i++) { GUI.Label(nxRect, str[i]); nxRect.y += nxRect.height; } } }
вот пример использования:
Code
NextStringer nx; void Start () {
nx = new NextStringer(new Rect(0, 0, 100, 20)); nx.AddString("dfsfdsfsdf"); nx.AddString("ffffff");
}
void OnGUI() {
nx.Print();
}
Копипастить окуратно, здесь нету класса .
Добавлено (04.12.2012, 00:03) --------------------------------------------- nx = new NextStringer(new Rect(0, 0, 100, 20)); размер строки, смещение будет на height т.е 20. nx.AddString("dfsfdsfsdf"); добавление строки, можно добавить много строк. nx.Print(); нарисует сразу все строки подряд.
Добавлено (04.12.2012, 01:30) --------------------------------------------- Omlette, все статы тоже вынести в отдельный класс.
public class Char { string name; float char_level; float char_armor ; float char_hp; float char_mana ; string char_damage ; float char_agility ; float char_exp ; public Char(string name, string class) { this.name=name; this.class=class; Создается новый персонаж. По нику классу, может еще что то. Дальше заполняется данными по умолчанию. Это лвл=0, деньги тоже 0, Урон обычный без доспехов. Итп. голый новичок.
} public void SetUp() или LoadData() { тем или иным способом заполняем класс данными. Например считываем с файла. Или через диалоговое окно. Может даже с бд. } public void SaveData() { Сохраняем куда нибудь. }
} Все остальное добавляется уже специальными Интерфейсами. Например: NewLvL(); AddExp(int exp); Максимально отделяем данные от реализации.
Про вывод информации: public class Stats { Char char; public Stats(string name) { char=GetChar(name); PrintStats(); } void PrintStats() { Label(pos,char.name); Label(pos,char.lvl); Думаю суть понятна. } } Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Сообщение отредактировал Kira - Вторник, 04 Декабря 2012, 01:35
Kira, огромнейшее спасибо тебе! Сейчас буду разбирать скрипты... Я так понял, ГУИ скин это как CSS?
Да вот пипец, почему я не могу понять эту чепуху... Пытаюсь в скрите bar_data, сделать скин, который в дальнейшем будет использоваться в скрипте bar. Пишу скин, например:
А хотя нет, уже прошарил, вот только если скин в другом скрипте, нужно getComonent юзать? Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
Сообщение отредактировал Omlette - Вторник, 04 Декабря 2012, 14:12
Omlette, Во первых ужас, во 2х что ты хочешь сделать? GUI.skin = skin_style_1; сначала ты создаешь ссылку на готовый скин. GUI.skin - это скин по умолчанию который будет на весь гуй. И не обязательно вызывать его, он и так сработает GUI.Box("qehqwehq"); то есть достаточно будет этого. GUIStyle.none.normal.textColor = Color.green;// теперь ты делаешь какой то ужас. Тебя не настораживает none? У тебя нету экземпляра стиля. Вообще сделай так:
public GUIStyle box; // тогда в инспекторе у тебя появятся настройки стилей. открой вкладку бокс и настрой как надо.
Если на одном скрипте нужно еще настройки лейбола, то создай еще: public GUIStyle label; GUIStyle - это часть скина, то есть конкретно 1го элемента. И поэтому не нужно писать GetStyle
void OnGUI() { GUI.Box(rect,"qehqwehq",skin_style_1); } Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн