Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| |
Kira | Дата: Вторник, 30 Июля 2013, 19:51 | Сообщение # 4401 |
заслуженный участник
Сейчас нет на сайте
| Omlette, я бы сказал так, каждая точка в системе координат, является системой координат. Зачем это нужно? Простой пример. Есть шар-Земля. Он вращается вокруг оси. Но он еще и вращается вокруг солнца. Т.е землю мы вращаем по локальной системе, а вокруг солнца по глобальной или локальной солнца.
Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
|
|
| |
Omlette | Дата: Вторник, 30 Июля 2013, 20:48 | Сообщение # 4402 |
частый гость
Сейчас нет на сайте
| (Удалено)
Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
Сообщение отредактировал Omlette - Четверг, 01 Августа 2013, 20:41 |
|
| |
Adom | Дата: Среда, 31 Июля 2013, 19:15 | Сообщение # 4403 |
Печенька!
Сейчас нет на сайте
| Как выключать и включать скрипт который висит на объекте через другой скрипт ?
|
|
| |
seaman | Дата: Среда, 31 Июля 2013, 20:11 | Сообщение # 4404 |
старожил
Сейчас нет на сайте
| enabled = true/false
|
|
| |
zaicev9797 | Дата: Среда, 31 Июля 2013, 20:15 | Сообщение # 4405 |
AbRaKaDaBrA
Сейчас нет на сайте
| Можно в скрипте который надо отключать, задать булевую переменую и все вычисления делать если тру. А в другом скрипте через гет компонент или сенд меседж менять эту переменую, но чтото мне подсказывает что это кастыль, и можно както подругому сделать Добавлено (31.07.2013, 20:15) --------------------------------------------- Кстати у меня энэйблэдом не получается отключать, пишет обж. Реферднс из нот сет ту ан инстанс оф эн обджект(я это еще помню когда пытался ленс флеерс отключить скриптом)
проект Mysterious Space. The losted moment
|
|
| |
Kira | Дата: Среда, 31 Июля 2013, 20:18 | Сообщение # 4406 |
заслуженный участник
Сейчас нет на сайте
| zaicev9797, сначала нужно ссылку на объект получить.
Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
|
|
| |
zaicev9797 | Дата: Среда, 31 Июля 2013, 20:24 | Сообщение # 4407 |
AbRaKaDaBrA
Сейчас нет на сайте
| Ну шож я дурак шоле совсем по вашему, конечно я сначала нахожу камеру, потом в ней компонент ленс флеерс, а потом энэйблед = фалс
проект Mysterious Space. The losted moment
|
|
| |
Omlette | Дата: Четверг, 01 Августа 2013, 11:17 | Сообщение # 4408 |
частый гость
Сейчас нет на сайте
| Удалено.
Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
Сообщение отредактировал Omlette - Четверг, 01 Августа 2013, 20:41 |
|
| |
E][pert | Дата: Четверг, 01 Августа 2013, 16:20 | Сообщение # 4409 |
C#-XNA-Unity
Сейчас нет на сайте
| После нескольких часов проб решил все таки обратится к вам Задача: после нажатия кнопки нужно плавно(быстро) двигать объект сначала в правую сторону на 112 после следующего нажатия в начальную позицию. Если движение еще не прекратилось, а произошло нажатие, то соответственно двигать в обратном направлении с текущей позиции объекта. Подскажите хотя бы алгоритм или черновик кода
Помогаю по мере возможностей, учусь по мере сил. ©E}{pert Tower defence in processing... For Web/iOS/Android.
Сообщение отредактировал E][pert - Четверг, 01 Августа 2013, 16:21 |
|
| |
Kira | Дата: Четверг, 01 Августа 2013, 17:11 | Сообщение # 4410 |
заслуженный участник
Сейчас нет на сайте
| Unity не конвертит max файлы, в место этого он запускат сам 3макс и зависает . Добавлено (01.08.2013, 17:00) --------------------------------------------- zaicev9797, так ошибка говорит что ссылка не найдена. Добавлено (01.08.2013, 17:05) ---------------------------------------------
Цитата (Omlette) Vector3 direction = transform.position - Camera.main.transform.position; Вектор направления, что получить вектор направления вычитаем из таргета, стартувую позицию. Дальше физика, я до нее еще не дошел, рано пока.Добавлено (01.08.2013, 17:11) --------------------------------------------- E][pert, pos lastPos; Moove(move, position) { pos GetCurentPos(position); if(move==0) move to position; if(move==1) move to lastPos; if(move==2) pos move to position; } Вообщем ставить флаги.
Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
|
|
| |
E][pert | Дата: Четверг, 01 Августа 2013, 17:23 | Сообщение # 4411 |
C#-XNA-Unity
Сейчас нет на сайте
| Kira, ну это как бы еще не основная проблема сейчас даже следую справке http://docs.unity3d.com/Documentation/ScriptReference/Vector3.Lerp.html не получается регулировать скорость передвижения Цитата public float smooth = 5.0F; не пойму к чему там.
Помогаю по мере возможностей, учусь по мере сил. ©E}{pert Tower defence in processing... For Web/iOS/Android.
|
|
| |
Kira | Дата: Четверг, 01 Августа 2013, 17:43 | Сообщение # 4412 |
заслуженный участник
Сейчас нет на сайте
| E][pert, где то на форуме pixeye оставлял код на эту тему. Еще код можно подглядеть в itween.
Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Сообщение отредактировал Kira - Четверг, 01 Августа 2013, 17:46 |
|
| |
E][pert | Дата: Четверг, 01 Августа 2013, 18:02 | Сообщение # 4413 |
C#-XNA-Unity
Сейчас нет на сайте
| Цитата (Kira) можно подглядеть в itween как раз гляжу)Добавлено (01.08.2013, 18:02) --------------------------------------------- Реализовал через ITween.
Помогаю по мере возможностей, учусь по мере сил. ©E}{pert Tower defence in processing... For Web/iOS/Android.
|
|
| |
lentinant | Дата: Четверг, 01 Августа 2013, 20:02 | Сообщение # 4414 |
ленивый программист
Сейчас нет на сайте
| Цитата (Omlette) Цитата Vector3 direction = transform.position - Camera.main.transform.position; Что это за направление луча такое получается? Забыли банальное вычитание векторов? Получится вектор, направленный от Camera.main.transform.position до transform.position.
Цитата (Omlette) Соответственно, не зная про direction, я не понимаю зачем это условие, а также почему вычитается objectSize. Насчет objectSize, наведу пример. Есть шар радиусом 10 и есть точка, которая находится на расстоянии 20 от центра шара. В transform.position шара хранится местоположение именно центра шара. Получается, если мы захотим найти расстояние между точкой и поверхностью шара, то нам не будет достаточно расстояния между их transform.position, нам еще нужно вычесть размер самого шара (в данном случае, 10). Компонента, которую нужно вычесть, и есть objectSize.
Теперь, что же делает условие. Мы знаем настоящее расстояние между объектом и камерой. Мы посылаем от камеры до объекта луч. Если дистанция в hit.distance равна полученному в правой части условия расстоянию, значит, луч прошел все расстояние, и на пути от камеры к объекту ничего нет. Если же дистанция меньше, значит, луч прошел не полное расстояние, и на пути есть другой объект, который, предположительно, заслоняет обзор. Ясное дело, что в таком случае, не стоит отображать имя заслоненного объекта.
Когда-то тут будут ссылки на крутые проекты. Или нет.
Сообщение отредактировал lentinant - Четверг, 01 Августа 2013, 20:07 |
|
| |
Adom | Дата: Четверг, 01 Августа 2013, 20:03 | Сообщение # 4415 |
Печенька!
Сейчас нет на сайте
| Люди помогите как переделать этот скрипт для игры по мультиплееру ? Код using UnityEngine; using System.Collections;
public class ControllerD : MonoBehaviour { public Transform Player; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if(Input.GetKey(KeyCode.W)){ Player.Translate(0,0,1 *1); } // if(Input.GetKey(KeyCode.S)){ Player.Translate(0,0,-1 *1); } // if(Input.GetKey(KeyCode.D)){ Player.Translate(1,0,0 *1); } // if(Input.GetKey(KeyCode.A)){ Player.Translate(-1,0,0 *1); } if(Input.GetKey(KeyCode.Space)){ Player.Translate(0,1,0 *1); } } } И вот этот Код using UnityEngine; using System.Collections; public class Shooting : MonoBehaviour { public Transform bullet; //Префаб патрона public Transform MuzzleFlash; //публичная переменная для префаба вспышки public int BulletForce = 5000; //Скорость патрона public AudioClip Fire; //Аудиоклип воспроизводящийся во время стрельбы public AudioClip Reload; //Аудиоклип воспроизводящийся во время перезарядки private float ReloadTimer = 0.0f; //Переменная для таймаута перезарядки private float MuzzleFlashLifetime = 0.0f; //Время жизни вспышки // Use this for initialization
void Start () { MuzzleFlash.active = false; // вспышка невидима } // Update is called once per frame void Update () { if(Input.GetKeyUp(KeyCode.Mouse0)) //Если нажата ЛКМ и кол-во патронов больше 0 { Shoot(); }
if(ReloadTimer>0) //если таймер больше 0 { ReloadTimer -= Time.deltaTime; //Переменная перезарядки уменьшается с течением времени } if(MuzzleFlashLifetime>0) //если время жизни вспышки больше 0 { MuzzleFlashLifetime -= Time.deltaTime; //Переменная времени жизни вспышки уменьшается с течением времени } if(MuzzleFlashLifetime<=0) //если время жизни вспышки больше 0 { MuzzleFlash.active = false; // вспышка невидима } } void Shoot() { Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint" BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce" audio.PlayOneShot(Fire);//проигрываем звук выстрела MuzzleFlash.active = true; //вспышка от выстрела видна MuzzleFlashLifetime = 0.1f; //установка времени жизни вспышки } }
Сообщение отредактировал Adom - Четверг, 01 Августа 2013, 20:33 |
|
| |
Omlette | Дата: Четверг, 01 Августа 2013, 20:23 | Сообщение # 4416 |
частый гость
Сейчас нет на сайте
| Черт, народ, я замучался! Походу я вообще дурак
Помогите здесь найти NullReferenceException и тыкните где надо сделать проверку, пишет на 108 строке (Код else if (HideMonBar(transform.position.x, target.transform.position.x) )
Че-то я не могу найти.
Вот собсно код:
Код using UnityEngine; using System.Collections;
public class mon_bar : MonoBehaviour { public GUISkin skin;
public bool show_mon_bar; string mon_name; int mon_lv; int mon_max_hp; int mon_cur_hp; string mon_class; GameObject target;
GameObject go_mon; mon01_stats ob_mon;
GameObject go_char; char_stats ob_char;
//Цвет уровня монстра. int char_lv; string mon_lv_color;
//sound public AudioClip click_mon_snd;
// Use this for initialization void Start() { go_mon = GameObject.Find("mon_01"); ob_mon = go_mon.GetComponent<mon01_stats>();
go_char = GameObject.Find("main_char"); ob_char = go_char.GetComponent<char_stats>(); char_lv = ob_char.char_lv;
show_mon_bar = false;
if (ob_mon.mon_name == null) { mon_name = "Без имени"; } else { mon_name = ob_mon.mon_name; }
mon_lv = ob_mon.mon_lv; mon_max_hp = ob_mon.mon_max_hp; mon_cur_hp = ob_mon.mon_cur_hp;
if (ob_mon.mon_class == null) { mon_class = "-"; } else { mon_class = ob_mon.mon_class; }
if (mon_lv < char_lv) { mon_lv_color = "LvMonLabelGray"; } else if ((mon_lv - char_lv) <= 5 || mon_lv == char_lv) { mon_lv_color = "LvMonLabelWhite"; } else if ((mon_lv - char_lv) > 5) { mon_lv_color = "LvMonLabelRed"; }
}
// Update is called once per frame void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;
if (Input.GetMouseButtonUp(0)) { if (Physics.Raycast(ray, out hit, 65)) { Debug.DrawLine(ray.origin, hit.point);
if (hit.collider.gameObject.tag == "Monster") { show_mon_bar = true; PlayMonClickSound(); target = hit.collider.gameObject; } else { show_mon_bar = false; } } }
if (Input.GetKeyDown(KeyCode.Escape)) { show_mon_bar = false; }
else if (HideMonBar(transform.position.x, target.transform.position.x) || HideMonBar(transform.position.y, target.transform.position.y) || HideMonBar(transform.position.z, target.transform.position.z)) { show_mon_bar = false; } }
bool HideMonBar(float x, float y) { if ((x - y) > 45f || (x - y) < -45f) { return true; } else { return false; } }
void PlayMonClickSound() { audio.PlayOneShot(click_mon_snd); }
void OnGUI() { GUI.skin = skin;
if (show_mon_bar) { GUI.Box(new Rect(0.5f * Screen.width, 0.068f * Screen.height, Screen.width * 0.109f, Screen.height * 0.08f), mon_name, GUI.skin.GetStyle("MonsterBar")); GUI.Label(new Rect(0.503f * Screen.width, 0.097f * Screen.height, Screen.width * 0.01f, Screen.height * 0.01f), "Здоровье: " + mon_max_hp + " / " + mon_cur_hp, GUI.skin.GetStyle("HpChStatus")); GUI.Label(new Rect(0.503f * Screen.width, 0.123f * Screen.height, Screen.width * 0.01f, Screen.height * 0.01f), "Класс: " + mon_class, GUI.skin.GetStyle("HpChStatus")); GUI.Label(new Rect(0.622f * Screen.width, 0.07f * Screen.height, Screen.width * 0.01f, Screen.height * 0.01f), mon_lv.ToString(), GUI.skin.GetStyle(mon_lv_color)); } } }
Буду очень благодарен!
Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
|
|
| |
Adom | Дата: Четверг, 01 Августа 2013, 20:26 | Сообщение # 4417 |
Печенька!
Сейчас нет на сайте
| Omlette,Это ошибка когда ты в инспекторе не поставил нужный объект в GameObject target; GameObject go_mon; или что-то в этом роде попробуй поставь все нужные обекты в нужные GameOjectЫ
|
|
| |
Omlette | Дата: Четверг, 01 Августа 2013, 20:30 | Сообщение # 4418 |
частый гость
Сейчас нет на сайте
| Adom, тут инспектор не при чем, так как переменная получает значение походу выполнения скрипта.
Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
|
|
| |
Adom | Дата: Четверг, 01 Августа 2013, 20:34 | Сообщение # 4419 |
Печенька!
Сейчас нет на сайте
| Omlette,АА ну тогда ничем не могу помочь )
Добавлено (01.08.2013, 20:34) --------------------------------------------- Можешь помочь в этом ?Как переделать эти скрипты для игры по Мультиплееру Код using UnityEngine; using System.Collections;
public class ControllerD : MonoBehaviour { public Transform Player; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if(Input.GetKey(KeyCode.W)){ Player.Translate(0,0,1 *1); } // if(Input.GetKey(KeyCode.S)){ Player.Translate(0,0,-1 *1); } // if(Input.GetKey(KeyCode.D)){ Player.Translate(1,0,0 *1); } // if(Input.GetKey(KeyCode.A)){ Player.Translate(-1,0,0 *1); } if(Input.GetKey(KeyCode.Space)){ Player.Translate(0,1,0 *1); } } } Код using UnityEngine; using System.Collections; public class Shooting : MonoBehaviour { public Transform bullet; //Префаб патрона public Transform MuzzleFlash; //публичная переменная для префаба вспышки public int BulletForce = 5000; //Скорость патрона public AudioClip Fire; //Аудиоклип воспроизводящийся во время стрельбы public AudioClip Reload; //Аудиоклип воспроизводящийся во время перезарядки private float ReloadTimer = 0.0f; //Переменная для таймаута перезарядки private float MuzzleFlashLifetime = 0.0f; //Время жизни вспышки // Use this for initialization
void Start () { MuzzleFlash.active = false; // вспышка невидима } // Update is called once per frame void Update () { if(Input.GetKeyUp(KeyCode.Mouse0)) //Если нажата ЛКМ и кол-во патронов больше 0 { Shoot(); }
if(ReloadTimer>0) //если таймер больше 0 { ReloadTimer -= Time.deltaTime; //Переменная перезарядки уменьшается с течением времени } if(MuzzleFlashLifetime>0) //если время жизни вспышки больше 0 { MuzzleFlashLifetime -= Time.deltaTime; //Переменная времени жизни вспышки уменьшается с течением времени } if(MuzzleFlashLifetime<=0) //если время жизни вспышки больше 0 { MuzzleFlash.active = false; // вспышка невидима } } void Shoot() { Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint" BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce" audio.PlayOneShot(Fire);//проигрываем звук выстрела MuzzleFlash.active = true; //вспышка от выстрела видна MuzzleFlashLifetime = 0.1f; //установка времени жизни вспышки } }
Сообщение отредактировал Adom - Четверг, 01 Августа 2013, 20:34 |
|
| |
Omlette | Дата: Четверг, 01 Августа 2013, 20:36 | Сообщение # 4420 |
частый гость
Сейчас нет на сайте
| Adom, до мультиплеера мне еще далеко, так что не шарю, сорь. Там надо, на сколько я помню, сервер писать...
Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
|
|
| |
|