| 
				
				Вопрос-[ответ] по Unity
				 |   |  
| QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |  
 
старожил 
Сейчас нет на сайте 
 
 | Вопрос-[Ответ] по Unity3d 
    База скриптов Unity3d    Курс Уроков по Unity 3D от Alcatraz
  ConsMark - поисковик по интернет магазинам.
 
 Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54  |  
| 
 | 
 |    |  
| Antrix | Дата: Среда, 08 Июля 2015, 08:48 | Сообщение # 7101 |  
 
почетный гость 
Сейчас нет на сайте 
 
 | x_Medwed   Кидаешь на сцену ThirdPersonController, в него добавляешь камеру. Камеру сделать main camera и настроить положение как тебе удобно.
 |  
| 
 | 
 |    |  
| Vip_and_Rip | Дата: Четверг, 09 Июля 2015, 16:37 | Сообщение # 7102 |  
| 
 почетный гость 
Сейчас нет на сайте 
 
 | Можно-ли вынести сообщения из Log.Debag в GUI, сделать подобие журнала событий? Допустим, клик - сообщение "Персонаж <name> идет к..." или "Персонаж <name> вступает в бой с..." ?   В смысле, что-бы это отображалось в самой игре, а не консоли Unity.
  Больше никогда не буду делать игры.
 
 Сообщение отредактировал Vip_and_Rip - Четверг, 09 Июля 2015, 16:39  |  
| 
 | 
 |    |  
| beril | Дата: Четверг, 09 Июля 2015, 17:45 | Сообщение # 7103 |  
 
Я не ленивый, я — энергосберегающий 
Сейчас нет на сайте 
 
 | Можно тык    или можешь мою модификацию, которой я пользовался когда в не Pro версии нельзя было к билду консоль подключать 
   Работает с UI   в переменную TextBox закидываешь свой Text (куда будет инфа выводиться) 
   обращаться к консоли для вывода DebugConsole.Log(1 параметр текст сообщения, тип(каким цветом выведется сообщение));   кроме сообщения консоль выводит имя скрипта, класса и метода с которого вызывалась 
   Код using UnityEngine;   using System.Collections;   using UnityEngine.UI;   using System.Diagnostics;   using System; 
   /*    * Debug консоль для тестов в готовом билде    */ 
   public class DebugConsole : MonoBehaviour { 
       private static DebugConsole _debug;       public static DebugConsole _Debug       {           get { return _debug; }       }                 public Text TextBox; 
       public bool DebugLogVis; 
       private string textBuild;       private string compareString;       private string output = "";       private string stack = ""; 
       void Awake()       {           _debug = this;            } 
       void Update()       {           if (_debug.TextBox.text.Length >= 14000)           {               _debug.TextBox.text = null;           } 
                      if (Input.GetKeyDown(KeyCode.E))           { 
           }       } 
       #region Метод Callback 
       void OnEnable()       {           Application.logMessageReceived += HandleLog;       } 
       void OnDisable()       {           Application.logMessageReceived -= HandleLog;       } 
       void HandleLog(string logString , string stackTrace , LogType type)       {           output = logString;           stack = stackTrace;           if (type == LogType.Error || type == LogType.Exception || type == LogType.Warning)           {               Log(output + " " + stack , 3);           }       }       #endregion 
       /// <summary>       /// Вывод сообщений в консоль       /// </summary>       /// <param name="message">текст сообщения</param>       /// <param name="type">вид(цвет)</param>       public static void Log(string message , int type)       {           StackTrace stackTrace = new StackTrace(); 
           if (_debug.DebugLogVis)               UnityEngine.Debug.Log(message); 
           switch (type)           {               case 0://обычный текст 
                   if (_debug.TextBox.text.IndexOf(message) > -1)                   {                       return;                   }                   else                   {                       _debug.textBuild = string.Format("<color=lightblue>\n{0}</color>" + "<color=#0000ffff>(Class: {1}.cs, Method: {2})</color>" , message ,                      stackTrace.GetFrame(1).GetMethod().ReflectedType , stackTrace.GetFrame(1).GetMethod().Name);                       _debug.compareString = message; 
                       _debug.TextBox.text += _debug.textBuild; 
                       _debug.textBuild = null; 
                   }                   break;               case 1://текст квестов и т.д                   if (_debug.TextBox.text.IndexOf(message) > -1)                   {                       return;                   }                   else                   {                       _debug.textBuild = string.Format("<color=orange>\n{0}</color>" + "<color=#0000ffff>(Class: {1}.cs, Method: {2})</color>" , message ,                      stackTrace.GetFrame(1).GetMethod().ReflectedType , stackTrace.GetFrame(1).GetMethod().Name); 
                       _debug.compareString = message; 
                       _debug.TextBox.text += _debug.textBuild; 
                       _debug.textBuild = null;                   }                   break;               case 2://особый текст                   if (_debug.TextBox.text.IndexOf(message) > -1)                   {                       return;                   }                   else                   {                       _debug.textBuild = string.Format("<color=green>\n{0}</color>" + "<color=#0000ffff>(Class: {1}.cs, Method: {2})</color>" , message ,                      stackTrace.GetFrame(1).GetMethod().ReflectedType , stackTrace.GetFrame(1).GetMethod().Name); 
                       _debug.compareString = message; 
                       _debug.TextBox.text += _debug.textBuild; 
                       _debug.textBuild = null;                   }                   break;               case 3://повышеное внимание                   if (_debug.TextBox.text.IndexOf(message) > -1)                   {                       return;                   }                   else                   {                       _debug.textBuild = string.Format("<color=red>\n{0}</color>" + "<color=#0000ffff>(Class: {1}.cs, Method: {2})</color>" , message ,                      stackTrace.GetFrame(1).GetMethod().ReflectedType , stackTrace.GetFrame(1).GetMethod().Name); 
                       _debug.compareString = message; 
                       _debug.TextBox.text += _debug.textBuild; 
                       _debug.textBuild = null;                   }                   break;           }       }             }  
 
         Накодил? Убери за собой!   Инвентарь в Unity(UI)   Инвентарь в Unity(GUI) 
 |  
| 
 | 
 |    |  
| ivan2009 | Дата: Четверг, 09 Июля 2015, 20:25 | Сообщение # 7104 |  
 
частый гость 
Сейчас нет на сайте 
 
 | Здравствуйте.   Начал изучать юнити совсем недавно,так что если кому то мои вопросы покажутся нубскими, уж извиняйте...   Хочу сделать контроллер перемещения объекта с помощью мышки,самый простой, что бы кубик передвигался(пока без анимации ) по платформе по клику ЛКМ в указанное место.   Шастал по просторам гугла, читал описания, даже нашел готовый скрипт(правда на устаревший юнити, у меня 5.1.1).   В общем все что смог пока родить   Код using UnityEngine;   using System.Collections; 
   public class myMove : MonoBehaviour {    private Vector3 mousePos;    //private Vector3 playerPos;    public float speed = 5f;    Ray ray;    RaycastHit hit;    GameObject player;    float mag; 
    // Use this for initialization    void Start () {     player = (GameObject)this.gameObject;     //playerPos = player.transform.position; 
    } 
    // Update is called once per frame    void Update () {     mousePos = Input.mousePosition;     if (Input.GetMouseButton (0)) {      ray = Camera.main.ScreenPointToRay(Input.mousePosition);      if(Physics.Raycast(ray, out hit, 500.0f)){       Debug.Log ("MOUSE POS -> " + mousePos);       //mag = (transform.position - hit.point).magnitude;       //player.transform.position =  Vector3.MoveTowards(player.transform.position, hit.point, mag);      //player.transform.position = new Vector3(hit.point.x, transform.position.y , hit.point.z);       //player.transform.position += hit.point*speed*Time.deltaTime;       Debug.Log("NEW PLAYER POS -> " + player.transform.position); 
      }     } 
    }   }     И вот какие незадачи...   если подключаю в первом варианте mag = (transform.position - hit.point).magnitude;   				player.transform.position = Vector3.MoveTowards(player.transform.position, hit.point, mag); - то кубик мгновенно появляется в точке hit.point и начинает взлетать по оси У.   во втором player.transform.position = new Vector3(hit.point.x, transform.position.y , hit.point.z); - то кубик мгновенно появляется в точке hit.point, если зажать ЛКМ и подвигать мышкой, то дублирует координаты курсора.   в третьем player.transform.position += hit.point*speed*Time.deltaTime; - то кубик движется в hit.point пока зажата кнопка ЛКМ, а иногда движется и не туда     А мне бы хотелось сделать так что при нажатии ЛКМ(одном клике) кубик с определенной скоростью передвигался в точку hit.point, но пока что видать не хватает в голове нужных знаний.   Так что буду очень признателен если кто то поможет.
 |  
| 
 | 
 |    |  
| beril | Дата: Четверг, 09 Июля 2015, 21:25 | Сообщение # 7105 |  
 
Я не ленивый, я — энергосберегающий 
Сейчас нет на сайте 
 
 | Цитата ivan2009 (  )  в третьем player.transform.position += hit.point*speed*Time.deltaTime; - то кубик движется в hit.point пока зажата кнопка ЛКМ, а иногда движется и не туда     ну само собой он бужет двигаться пока зажата ЛКМ ты ведь все в Input.GetMouseButton (0) запихнул, а движется не туда потому, что двигаешся в левые координаты, а необходимо сначало найти вектор направления (точка куда нужно двигаться(hit.point) - transform.position) и по нему уже двигаться   Для передвижения лучше используй CharacterController 
   Примерно (нету юнити под рукой) используй что вроде этого   Код using UnityEngine;   using System.Collections; 
   public class myMove : MonoBehaviour {       private Vector3 mousePos;       //private Vector3 playerPos;       public float speed = 5f;       Ray ray;       RaycastHit hit;       GameObject player;       float mag; 
   bool walk;   public Vector3 TargetToMove = new Vector3();    
       // Use this for initialization       void Start () {        player = (GameObject)this.gameObject;        //playerPos = player.transform.position; 
       } 
       // Update is called once per frame       void Update () { 
   if(walk)   move(); 
        mousePos = Input.mousePosition;        if (Input.GetMouseButton (0)) {         ray = Camera.main.ScreenPointToRay(Input.mousePosition);         if(Physics.Raycast(ray, out hit, 500.0f)){         TargetToMove = hit.point;   walk = true;         }        }   void move()   {   var posMove = TargetToMove - transform.position; 
   controller.SimpleMove(posMove * Time.deltaTime * Speed); 
   }       }   }  
 
         Накодил? Убери за собой!   Инвентарь в Unity(UI)   Инвентарь в Unity(GUI) 
 |  
| 
 | 
 |    |  
| ivan2009 | Дата: Четверг, 09 Июля 2015, 23:14 | Сообщение # 7106 |  
 
частый гость 
Сейчас нет на сайте 
 
 | Получилось так вот Код using UnityEngine;   using System.Collections; 
   public class myMove : MonoBehaviour {    private Vector3 mousePos;    //private Vector3 playerPos;    public float speed = 5f;    Ray ray;    RaycastHit hit;    GameObject player;    float mag;    bool walk =true;    public Vector3 TargetToMove = new Vector3();    CharacterController controller; 
    // Use this for initialization    void Start () {     player = (GameObject)this.gameObject; 
     //playerPos = player.transform.position; 
    } 
    // Update is called once per frame    void Update () { 
     if (walk) { 
      mousePos = Input.mousePosition;      if(Input.GetMouseButton(0)){       ray = Camera.main.ScreenPointToRay(Input.mousePosition);       if(Physics.Raycast(ray, out hit, 500.0f)){        TargetToMove = hit.point;        walk = true; 
       }      }      move();      }    }    void move(){     var posMove = TargetToMove - transform.position;          controller.SimpleMove (posMove * Time.deltaTime * speed); 
         } 
   }        Только вот куб не двигается, переменная TargetToMove отображает координаты, и ругается что вроде как controller постоянно с дэфолтовым значением(null) точно не умерен, в англ слабоват...   вот что юнити пишет   Assets/MyScript/myMove.cs(14,29): warning CS0649: Field `myMove.controller' is never assigned to, and will always have its default value `null'      куда мне контроллер надо подключить?
 |  
| 
 | 
 |    |  
| Vip_and_Rip | Дата: Четверг, 09 Июля 2015, 23:34 | Сообщение # 7107 |  
| 
 почетный гость 
Сейчас нет на сайте 
 
 | Цитата beril (  )  Можно тык      Немного не то, но смысл понятен - буду разбираться. Благодарю   
   Цитата ivan2009 (  )  очу сделать контроллер перемещения объекта с помощью мышки,самый простой, что бы кубик передвигался(пока без анимации ) по платформе по клику ЛКМ в указанное место.     Тоже был такой вопрос, но воспользовался кодом из этого урока, потом модифицировал его под свои нужды.
  Больше никогда не буду делать игры.
 |  
| 
 | 
 |    |  
| ivan2009 | Дата: Четверг, 09 Июля 2015, 23:56 | Сообщение # 7108 |  
 
частый гость 
Сейчас нет на сайте 
 
 | получилось, радостно.   на всяк случай скину код может найдутся ещё такие как я...   Код using UnityEngine;   using System.Collections; 
   public class myMove : MonoBehaviour {   //    private Vector3 mousePos;      //private Vector3 playerPos;      public float speed = 5f;      Ray ray;      RaycastHit hit;         GameObject player;      float mag;      bool walk =true ;      public Vector3 TargetToMove = new Vector3();      CharacterController controller; 
      // Use this for initialization      void Start () {       player = (GameObject)this.gameObject;         controller = (CharacterController)gameObject.GetComponent(typeof(CharacterController));       //playerPos = player.transform.position; 
      } 
      // Update is called once per frame      void Update () { 
       if (walk) { 
        //mousePos = Input.mousePosition;        if(Input.GetMouseButton(0)){         ray = Camera.main.ScreenPointToRay(Input.mousePosition);         if(Physics.Raycast(ray, out hit, 500.0f)){          TargetToMove = hit.point;          walk = true; 
         }        }        move();        }      }      void move(){       var posMove = TargetToMove - transform.position;          controller.SimpleMove (posMove * Time.deltaTime * speed); 
               } 
   }        При движении кубик калашматило по всем осям пока в RigidBody freez rotation не поставил.   Очень доволен что получилось, сижу гоняю кубик по платформе...     Спасибо большое за помощь 
   Я заметил что по мере приближения объекта к указанной точке он замедляется и чем ближе тем медленней передвигается. Как сделать ему постоянную скорость вне зависимости от оставшегося расстояния?
 
 Сообщение отредактировал ivan2009 - Пятница, 10 Июля 2015, 00:29  |  
| 
 | 
 |    |  
| beril | Дата: Пятница, 10 Июля 2015, 06:05 | Сообщение # 7109 |  
 
Я не ленивый, я — энергосберегающий 
Сейчас нет на сайте 
 
 | Цитата ivan2009 (  )  Я заметил что по мере приближения объекта к указанной точке он замедляется и чем ближе тем медленней передвигается. Как сделать ему постоянную скорость вне зависимости от оставшегося расстояния?      Попробуй вместо SimpleMove => Move
 
         Накодил? Убери за собой!   Инвентарь в Unity(UI)   Инвентарь в Unity(GUI) 
 |  
| 
 | 
 |    |  
| JHawk | Дата: Пятница, 10 Июля 2015, 11:29 | Сообщение # 7110 |  
 
めゃくちゃちゃ 
Сейчас нет на сайте 
 
 | впервые столкнулся с такой проблемой:   Код this.transform.rotation.y = gameObject.transform.rotation.y;     ругается компилятор, говорит, мол, нельзя так делать.   Код error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.rotation'. Consider storing the value in a temporary variable     Посоветуйте, как эту проблему решить
 |  
| 
 | 
 |    |  
| seaman | Дата: Пятница, 10 Июля 2015, 13:15 | Сообщение # 7111 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | Цитата JHawk (  )  Посоветуйте, как эту проблему решить     Тебе написали как: "Consider storing the value in a temporary variable" 
   Добавлено (10 июля 2015, 13:15)   ---------------------------------------------   Цитата ivan2009 (  )  Как сделать ему постоянную скорость вне зависимости от оставшегося расстояния?     TargetToMove - transform.position уменьшается при подходе к цели. Следовательно ты все меньше сдвигаешь персонаж. Нужно нормализовать вектор, чтобы избавиться от длины и получить только направление:   var posMove = (TargetToMove - transform.position).normalize;   Только, естественно скорость подбирать нужно будет (увеличивать).
 
 Сообщение отредактировал seaman - Пятница, 10 Июля 2015, 13:15  |  
| 
 | 
 |    |  
| pixeye | Дата: Пятница, 10 Июля 2015, 15:12 | Сообщение # 7112 |  
 
Red Winter Software 
Сейчас нет на сайте 
 
 | Цитата JHawk (  )  ругается компилятор, говорит, мол, нельзя так делать.    
   Конечно нельзя. Rotation это структура. 
   делается так. 
   this.transform.rotation = Quaternion.Euler(new Vector3 (твое значение , твое значение , твое значение));
  ACTORS - мой фреймворк на Unity   Until We Die - игра над которой работаю       
 
 Сообщение отредактировал pixeye - Пятница, 10 Июля 2015, 15:15  |  
| 
 | 
 |    |  
| ivan2009 | Дата: Пятница, 10 Июля 2015, 19:20 | Сообщение # 7113 |  
 
частый гость 
Сейчас нет на сайте 
 
 | Спасибо.   У куба при остановке постоянно меняется координата Z (transfotm.position), там тысячные доли циклически(по возрастанию) происходит это быстро(а чем больше я ставлю скорость тем больше это дрожание) и получается что кубик дрожит.   И ещё куб постоянно меняет координаты всех осей rotation(вокруг своей оси),я то поставил freezRotation в Rigidbody, но хотелось бы и самому его покрутить...   исходник   Код using UnityEngine;   using System.Collections; 
   public class myMove : MonoBehaviour {    public float speed = 5f;    Ray ray;    RaycastHit hit;    float mag;    bool walk = true ;    public Vector3 TargetToMove = new Vector3();    CharacterController controller; 
    // Use this for initialization    void Start () {     controller = (CharacterController)gameObject.GetComponent<CharacterController>(); 
    }    // Update is called once per frame    void Update () {     if (walk) {      if (Input.GetMouseButtonDown (0)) {       ray = Camera.main.ScreenPointToRay (Input.mousePosition);       if (Physics.Raycast (ray, out hit, 500.0f)) {        TargetToMove = hit.point;        walk = true;       }      }      move ();     }    } 
    void move(){     var posMove = (TargetToMove - transform.position).normalized;     controller.SimpleMove (posMove *   Time.deltaTime * speed  ); 
    }   }     Буду очень признателен за помощь!
 
 Сообщение отредактировал ivan2009 - Пятница, 10 Июля 2015, 19:22  |  
| 
 | 
 |    |  
| seaman | Дата: Пятница, 10 Июля 2015, 19:36 | Сообщение # 7114 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | Цитата pixeye (  )  делается так.      Quaternion.rot = transform.rotation;   rot.y = gameObject.transform.rotation.y;   transform.rotation = rot;Добавлено (10 июля 2015, 19:33) ---------------------------------------------
  Цитата ivan2009 (  )  кубик дрожит     Ну во первых - вынесите проверку луча из if(walk)   Во вторых выключайте walk, когда расстояние до цели меньше заданного:   Код Vector3 dir = TargetToMove - transform.position;   Vector3 dirNormal = dir.normalize;   controller.SimpleMove (posMove *   Time.deltaTime * speed  );   if(dir.magnitude < 0.01f) walk = false; Добавлено (10 июля 2015, 19:36) ---------------------------------------------
  Цитата ivan2009 (  )  хотелось бы и самому его покрутить.     Как крутить - смотрите мануал: Мануал
 |  
| 
 | 
 |    |  
| Vip_and_Rip | Дата: Суббота, 11 Июля 2015, 11:11 | Сообщение # 7115 |  
| 
 почетный гость 
Сейчас нет на сайте 
 
 | Вот у самого вопрос. Когда пишу какие-то функции, то выходит папирус на десятки строк и с кучей активаторов и переменных. В 3-5 строчек ну никак не удается уложиться. Это нормально, или желательно, по возможности, сокращать длину кода и искать альтернативные варианты?
  Больше никогда не буду делать игры.
 
 Сообщение отредактировал Vip_and_Rip - Суббота, 11 Июля 2015, 11:12  |  
| 
 | 
 |    |  
| pixeye | Дата: Суббота, 11 Июля 2015, 13:58 | Сообщение # 7116 |  
 
Red Winter Software 
Сейчас нет на сайте 
 
 | Цитата Vip_and_Rip (  )  Вот у самого вопрос. Когда пишу какие-то функции, то выходит папирус на десятки строк и с кучей активаторов и переменных. В 3-5 строчек ну никак не удается уложиться. Это нормально, или желательно, по возможности, сокращать длину кода и искать альтернативные варианты?    
   Нужно писать так чтобы было тебе понятно особенно через месяц другой. Ну и это - оптимизированный и хороший код не означает всегда легкочитаемость, но ты точно должен быстро определить откуда растут "ноги". 
   Юнити предлагает очень удобный "паттерн" - это компоненты. Рассматривай свои объекты как набор компонентов. 
     
   Такой вариант позволяет содержать относительно небольшие скрипты, собирать предметы как конструктор и всегда легко определить откуда что вызывается.
  ACTORS - мой фреймворк на Unity   Until We Die - игра над которой работаю       
 |  
| 
 | 
 |    |  
| BESS55555 | Дата: Воскресенье, 12 Июля 2015, 17:14 | Сообщение # 7117 |  
 
Three Dollar Bill Y'All$ 
Сейчас нет на сайте 
 
 | Посоветуйте пожалуйста список уроков по unity для древолаза который никогда с ним не сталкивался, мб есть какая то линейка уроков от интерфейса до point and click квеста, желательно чтобы всё в виде текста было. Руки относительно прямые, в своё время изучил графический пакет 3dsmax, photoshop.
 
  
 |  
| 
 | 
 |    |  
| beril | Дата: Воскресенье, 12 Июля 2015, 17:22 | Сообщение # 7118 |  
 
Я не ленивый, я — энергосберегающий 
Сейчас нет на сайте 
 
 | Цитата BESS55555 (  )  желательно чтобы всё в виде текста было.     Выбирай любую на русском тоже вроде есть.   Ну и мануал самое главное. Там все четко и последовательно и на русском языке
 
         Накодил? Убери за собой!   Инвентарь в Unity(UI)   Инвентарь в Unity(GUI) 
 |  
| 
 | 
 |    |  
| BESS55555 | Дата: Воскресенье, 12 Июля 2015, 17:30 | Сообщение # 7119 |  
 
Three Dollar Bill Y'All$ 
Сейчас нет на сайте 
 
 | Цитата beril (  )  Выбирай любую на русском тоже вроде есть.      Эм, я не нашёл там русских книг) Я англ. не настолько хорошо знаю, чтобы понять все термины которые там наверняка будут. Но всё равно спасибо за оперативность.   Просьба до сих пор актуальна.
 
  
 |  
| 
 | 
 |    |  
| GenaMoroz | Дата: Воскресенье, 12 Июля 2015, 17:41 | Сообщение # 7120 |  
| 
 был не раз 
Сейчас нет на сайте 
 
 | Доброго времени суток, товарищи. У кого-нибудь есть туторы по вращению 2D объекта с помощью тача?
  Level 3
 |  
| 
 | 
 |    |     
		
		 
 |