Понедельник, 30 Сентября 2024, 08:17

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-[ответ] по 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
    Сейчас нет на сайте
    После нескольких часов проб решил все таки обратится к вам sad
    Задача: после нажатия кнопки нужно плавно(быстро) двигать объект сначала в правую сторону на 112 после следующего нажатия в начальную позицию. Если движение еще не прекратилось, а произошло нажатие, то соответственно двигать в обратном направлении с текущей позиции объекта.
    Подскажите хотя бы алгоритм или черновик кода smile


    Помогаю по мере возможностей, учусь по мере сил. ©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макс и зависает wacko .

    Добавлено (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
    частый гость
    Сейчас нет на сайте
    Черт, народ, я замучался! Походу я вообще дурак happy

    Помогите здесь найти 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, до мультиплеера мне еще далеко, так что не шарю, сорь. Там надо, на сколько я помню, сервер писать...

    Я все смогу! Я все сумею! Переживу! Переболею! Перекантуюсь! Перебьюсь! Но своего таки добьюсь! Не упаду! Не утону! Из грязи вырвусь! Я смогу! И вновь улыбка засияет! Я все смогу! Я все сумею! Я не боюсь! Я не жалею!
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг