Updates from Июнь, 2019 Toggle Comment Threads | Keyboard Shortcuts

  • Павел Наконечный 13:46 on 15.06.2019 Permalink | Reply  

    Как заставить читать диалоги? 

    Источник поста: Mooshi Games

    Все хотят крутые сюжеты в своих играх, но что делать, если игроки ленятся читать тексты? Первый ответ банально прост — вы скучно пишите. Второй более комплексный — вы не знаете, как упростить текст.

    Соглашусь, сокращать нелегко, особенно, когда любишь придумывать, и литературный поток не останавливается никакими из возможных технических дамб. А с репликами вообще проблема подачи — очень часто они невольно превращаются в простыни. Но есть парочка простых лайфхаков.

    Делить тексты на абзацы. Почему-то не до всех доходит, что тексты надо делить на абзацы. Делается это достаточно легко, так как абзац обозначается после смысловой паузы. Представьте, что вы рассказываете историю, и как только какое-либо действие завершено, закрывается эпизод, и вы сразу переходите на новый абзац.
    Между абзацами должна быть пустая строка, а сами абзацы не должны превышать пяти строк.

    Расставлять акценты цветом. Если вам важно, чтобы игрок уловил определенное слово или действие, то подсветите его цветом. Как понять, какое именно это «слово»? Легко. Чаще всего это существительное, глагол (возможно их связка) или какая-то эмоциональная окраска действия. Все остальное тоже имеет место быть, но в более редких случаях. Такие слова обычно дают представление о том, что происходит в сцене.

    «Сейчас все плохо» — например, вы подсвечиваете слово «плохо», давая понять, что вот-вот у вас начнутся (или уже начались) настоящие проблемы, которые не идут ни в какое сравнение со всем тем, что было в игре до этой реплики.

    Цвет может также быть идентификатором речи главного и второстепенного героев.

    Расставлять акценты шрифтом. Любые выделения или даже смены шрифтов, по сути, похожи на цветовое кодирование.

    Задавать анимацию появления текста. Например, классический эффект «печатной машинки». А вообще вариантов очень много, если сразу выкатить полотно текста, то оно, скорее всего, отпугнет игрока. За бегущей строкой в этом плане интереснее следить.

    Делать тексты заметными. Текст должен хорошо читаться (не быть мелким, размытым или прозрачным) и занимать значительную часть экрана (только помните, во всем есть мера).

    Визуализировать текст. Различные анимации и кат-сцены сильно ударяют по бюджету, но значительно лучше с точки зрения донесения информации и интерактивности текста. Вы оживляете текст. Нет денег и времени — тогда лучше воспользоваться пунктами выше.

    Озвучка. Чтобы донести текст до игрока, его можно озвучить. Конечно, многие скажут, мол, на слух воспринимают хуже. Однако, чаще всего озвучка сопровождается дублированными субтитрами, которые либо по умолчанию находятся в игре, либо их можно подключить в настройках. Это чем-то схоже на эффект анимированного текста. Озвучка интерактивна сама по себе.

    Музыку в игре мы воспринимаем постоянно, так как она неотъемлемая часть игрового процесса. Озвучка так же может стать не менее органичной интеграцией текста.

    Если вам есть что добавить по вопросу: вас выслушают в нашем Telegram канале.

     
    • Павел Наконечный 13:53 on 03.06.2019 Permalink | Reply  

      [Гостевой пост] Tricky Towers psVita Port 

      Название поста говорит само за себя. Мне удалось портировать эту игру с PC-платформы на psVita без наличия исходников, только немного тёмной магии и глубокой декомпиляции. В общем, работа почти завершена, если не учитывать некоторые незаконченные шейдеры и отсутствие сетевой игры, проблем с оптимизацией.

      Об игре

      Ставьте блоки друг на друга, чтобы создать устойчивую башню и постарайтесь разрушить башни противников. Применяйте магию, чтобы укрепить свое строение, и отражайте темные заклинания своих соперников в этой динамичной командной игре. – Из описания игры в Steam

      История создания

      Порт разрабатывался 3 месяца, бОльшая часть ресурсов игры была повреждена или утеряна, код восстанавливался кусочками, наиболее затратным по времени оказалось вырезание API стима, но и классические мелочи жизни реверс инженеринга не были так легки. Шейдеры убиты в хлам, потому писались с нуля, оптимизации никакой, опять ручками доработка, сетевую игру пришлось вырезать из-за привязки к Стиму. Сейчас работаю над восстановлением игра еще не завершена полностью, но уже играбельна без вылетов, осталось хорошенько оптимизировать и игра будет завершена)

      Скачать

      Скачать с VitaDB

      P.S. У меня нет psvitaTV для тестирования LocalBattle, но на андроиде оно работает.

      Автор: Tushkan

      Напомню, что я призываю всех авторов статей к сотрудничеству по вопросу гостевых постов

       
      • Павел Наконечный 01:43 on 20.07.2018 Permalink | Reply  

        Voxel loot chest 

        Loot chest with gold lining. Feel free to use in free or commercial products, leaving credits to me.

         
        • Павел Наконечный 21:24 on 14.04.2018 Permalink | Reply  

          Login manager for GameSparks in Unity 

          Here you can grab your free login manager for GameSparks in Unity that uses device’s id and random guid for auth.

          As statistics say, you as gamedesigner shouldn’t use login or auth screens for player auth. Better auth them in background, using device unique Id’s or Google Play account (Play Games). That’s why I’ve written this script and published it for open use.

           1
           2
           3
           4
           5
           6
           7
           8
           9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          56
          57
          58
          59
          60
          61
          62
          63
          64
          65
          66
          67
          68
          69
          70
          71
          72
          73
          74
          75
          76
          77
          78
          79
          80
          81
          82
          using UnityEngine;
          using UnityEngine.SceneManagement;
          using GameSparks.Api.Requests;
          using GameSparks.Api.Responses;
          using System;
          
          public class LoginManager : MonoBehaviour
          {
              public string SceneAfterLogin;
              public static LoginManager Instance;
              private void Awake() {
                  Instance = this;
              }
          
              private void Start() {
                  GameSparksManager.Instance.OnGameSparksInitializationCompleted.AddListener(TryAutoLogin);
              }
          
              private void TryAutoLogin() {
                  if (PlayerPrefs.HasKey("login")) {
                      Login(PlayerPrefs.GetString("login"));
                  }
              }
              public static void Login(Action<string> registrationerror = null)
              {
                  var login = new System.Guid().ToString();
                  Login(login, registrationerror);
              }
          
              public static void Login(string login, Action<string> registrationerror = null)
              {
                  Login(login, SystemInfo.deviceUniqueIdentifier, Instance.Success, 
                  (s1, s2) => Register(s1, s2, Instance.Success, registrationerror));
              }
          
              static void Login(string login, string password, Action success, Action<string, string> error = null)
              {
                  new AuthenticationRequest()
                      .SetUserName(login)
                      .SetPassword(SystemInfo.deviceUniqueIdentifier)
                      .Send((response) =>
                      {
                          if (response.HasErrors)
                          {
                              if (error != null) {
                                  error(login, password);
                              }
                          }
                          else
                          {
                              Debug.Log("Successful login");
                              PlayerPrefs.SetString("login", login);
                              success();
                          }
                      });
              }
          
              static void Register(string login, string password, Action success, Action<string> error = null) {
                  new RegistrationRequest()
                      .SetUserName(login)
                      .SetDisplayName(login)
                      .SetPassword(SystemInfo.deviceUniqueIdentifier)
                      .Send((response) =>
                      {
                          if (response.HasErrors)
                          {
                              if (error != null) {
                                  error(login);
                              }
                          }
                          else
                          {
                              Debug.Log("Successful registration");
                              success();
                          }
                      });
              }
          
              void Success() {
                  SceneManager.LoadScene(SceneAfterLogin);
              }
          }
          

          GameSparks Manager that is used to fire event when GameSparks SDK is fully initialized.

           1
           2
           3
           4
           5
           6
           7
           8
           9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          using GameSparks.Platforms;
          using UnityEngine;
          using UnityEngine.Events;
          
          public class GameSparksManager : MonoBehaviour {
              public static GameSparksManager Instance;
              public GameObject GameSparks;
              public UnityEvent OnGameSparksInitializationCompleted = new UnityEvent();
          
              PlatformBase Platform;
              private void Awake() {
                  if (Instance == null) {
                      Instance = this;
                      DontDestroyOnLoad(gameObject);
                  }
                  else {
                      Destroy(gameObject);
                  }
              }
          
              private void Update() {
                  if (Platform != null) {
                      return;
                  }
          
                  Platform = GameSparks.GetComponent<PlatformBase>();
          
                  if (Platform != null) {
                      OnGameSparksInitializationCompleted.Invoke();
                  }
              }
          }
          
           
          • Павел Наконечный 17:01 on 24.02.2018 Permalink | Reply
            Tags: , free code, shader, snippet,   

            Free retro-style camera shader for Unity 

            Small shader for Unity, which I use in my games for drawing minimap.

             1
             2
             3
             4
             5
             6
             7
             8
             9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            Shader "Camera/MapShader"
            {
            	Properties
            	{
            		_MainTex ("Texture", 2D) = "white" {}
            	}
            	SubShader
            	{
            		// No culling or depth
            		Cull Off ZWrite Off ZTest Always
            
            		Pass
            		{
            			CGPROGRAM
            			#pragma vertex vert
            			#pragma fragment frag
            			
            			#include "UnityCG.cginc"
            
            			struct appdata
            			{
            				float4 vertex : POSITION;
            				float2 uv : TEXCOORD0;
            			};
            
            			struct v2f
            			{
            				float2 uv : TEXCOORD0;
            				float4 vertex : SV_POSITION;
            			};
            
            			v2f vert (appdata v)
            			{
            				v2f o;
            				o.vertex = UnityObjectToClipPos(v.vertex);
            				o.uv = v.uv;
            				return o;
            			}
            			
            			sampler2D _MainTex;
            
            			fixed4 frag (v2f i) : SV_Target
            			{
            				fixed4 col = tex2D(_MainTex, i.uv);
            				// i.uv[0]**2 + i.uv[1]**2 = 1
            				float2 coordfromcenter = i.uv - float2(0.5, 0.5);
            
                            float pixelWidth = 1 / _ScreenParams.x;
                            float pixelHeight = 1 / _ScreenParams.y;
            
                            float4 deltacolor =
                                (tex2D(_MainTex, i.uv + float2(pixelWidth,0)) +
                                tex2D(_MainTex, i.uv + float2(-pixelWidth,0)) +
                                tex2D(_MainTex, i.uv + float2(0,pixelHeight)) +
                                tex2D(_MainTex, i.uv + float2(0,-pixelHeight))) / 4 - col;
                            if (deltacolor.r + deltacolor.g + deltacolor.b > 0.04) {
                                return float4(0,1,0,1);
                            }
                            else {
                                return float4(0,0,0,1);
                            }
            
            			}
            			ENDCG
            		}
            	}
            }
            

            Add the component script below to GameObject with Camera and assign Material with the shader above to it.

             1
             2
             3
             4
             5
             6
             7
             8
             9
            10
            11
            12
            using UnityEngine;
            
            [ExecuteInEditMode]
            public class PostEffect : MonoBehaviour
            {
                public Material ShaderMaterial;
            
                private void OnRenderImage(RenderTexture src, RenderTexture dest)
                {
                    Graphics.Blit(src, dest, ShaderMaterial);
                }
            }
            
             
            • Павел Наконечный 20:00 on 14.02.2018 Permalink | Reply  

              Unity Typewriter effect for Text 

              Here is pretty simple Unity MonoBehaviour script that can be used to give Text typewriter effect with blinking cursor at the end.

              In the middle there is commented line that can fix moving when typing if you use Align on Center option.

               
              • Павел Наконечный 23:53 on 13.02.2018 Permalink | Reply  

                Unity AI Statemachine example 

                It is pretty simple and small realisation of statemachine for artifical intelligence in Unity based on MonoBehaviour Components to be able to set values for States in Inspector window.

                The Idle.cs is small example of working with Owner and States from inside of State.

                 
                • Павел Наконечный 19:44 on 29.09.2017 Permalink | Reply  

                  Unity | Плавное перемещение камеры 2D 

                  Небольшой скрипт, перемещающий камеру за целью с небольшой задержкой, зависящей от скорости.

                  
                  using System.Collections;
                  
                  using UnityEngine;
                  
                  public class SmoothFollow2D : MonoBehaviour {
                      public Transform Target;
                      public Vector3 Offset;
                      public float Velocity;
                      public float MinDistance;
                  
                      // Update is called once per frame
                      void LateUpdate() {
                          if (Target == null) {
                              return;
                          }
                  
                          var targetPos = Target.transform.position + Offset;
                  
                          if (Vector3.Distance(transform.position, targetPos) < MinDistance) {
                              return;
                          }
                          var newPos = Vector3.Lerp(transform.position, targetPos, Velocity * Time.fixedDeltaTime);
                          transform.Translate(transform.InverseTransformPoint(newPos));
                      }
                  }
                  

                   

                   
                  • Павел Наконечный 19:43 on 29.09.2017 Permalink | Reply  

                    Unity | Smooth camera follow 2D 

                    Camera with this small script will follow Target with gap depending on its speed.

                    
                    using System.Collections;
                    
                    using UnityEngine;
                    
                    public class SmoothFollow2D : MonoBehaviour {
                        public Transform Target;
                        public Vector3 Offset;
                        public float Velocity;
                        public float MinDistance;
                    
                        // Update is called once per frame
                        void LateUpdate() {
                            if (Target == null) {
                                return;
                            }
                    
                            var targetPos = Target.transform.position + Offset;
                    
                            if (Vector3.Distance(transform.position, targetPos) < MinDistance) {
                                return;
                            }
                            var newPos = Vector3.Lerp(transform.position, targetPos, Velocity * Time.fixedDeltaTime);
                            transform.Translate(transform.InverseTransformPoint(newPos));
                        }
                    }
                    
                     
                    • Павел Наконечный 17:18 on 26.09.2017 Permalink | Reply  

                      Unity | Маштабировать BoxCollider2D по спрайту 

                      Небольшой скрипт, который будет полезен, если ваш объект меняет спрайты различного размера.

                      public static void MatchToSize(GameObject obj, BoxCollider2D collider = null, SpriteRenderer renderer = null) {
                                  collider = collider ?? obj.GetComponent();
                                  renderer = renderer ?? obj.GetComponent();
                                  
                                  Vector2 S = renderer.sprite.bounds.size;
                                  collider.size = S;
                                  collider.offset = Vector2.zero;
                              }

                      UPD: Сделал возможность небольшой оптимизации при помощи передачи найденных компонентов в скрипт.

                       
                      • Павел Наконечный 17:17 on 26.09.2017 Permalink | Reply  

                        Unity | Match BoxCollider2D to sprite size 

                        Small script, which can be useful for objects that changes sprites with multiple resolutions and sizes.

                        public static void MatchToSize(GameObject obj, BoxCollider2D collider = null, SpriteRenderer renderer = null) {
                                    collider = collider ?? obj.GetComponent();
                                    renderer = renderer ?? obj.GetComponent();
                                    
                                    Vector2 S = renderer.sprite.bounds.size;
                                    collider.size = S;
                                    collider.offset = Vector2.zero;
                                }

                        UPD: Updated to support better optimization by calling with cached Components in args.

                         
                        • Павел Наконечный 20:26 on 25.09.2017 Permalink | Reply  

                          Unity | 2D Color Fade 

                          Небольшой скрипт на C# для Unity, позволяющий легко реализовать переход между двумя цветами Sprite Renderer’а за заданное время. Не подходит для 3D объектов.

                          using System;
                          using UnityEngine;
                          
                          public class FadeExt {
                                  public static IEnumerator Fade(GameObject obj, Color startcolor,
                           Color endcolor, float time, SpriteRenderer renderer = null, float tick = 0.01f) {
                                      renderer = renderer ?? obj.GetComponent();
                                      var lespspeed = tick / time;
                          
                                      renderer.color = startcolor;
                          
                                      while (renderer.color != endcolor) {
                                          renderer.color = Color.Lerp(renderer.color, endcolor, lespspeed);
                          
                                          yield return new WaitForSeconds(tick);
                                      }
                                  }
                              }
                          
                           
                          • Павел Наконечный 20:24 on 25.09.2017 Permalink | Reply
                            Tags:   

                            Unity | 2D Color Fade 

                            Small script, that can be used to make color transition in given time. Can be used only for SpriteRenderer.

                            using System;
                            using UnityEngine;
                            
                            public class FadeExt {
                                    public static IEnumerator Fade(GameObject obj, Color startcolor, Color endcolor,
                             float time, SpriteRenderer renderer = null, float tick = 0.01f) {
                                        renderer = renderer ?? obj.GetComponent();
                                        var lespspeed = tick / time;
                            
                                        renderer.color = startcolor;
                            
                                        while (renderer.color != endcolor) {
                                            renderer.color = Color.Lerp(renderer.color, endcolor, lespspeed);
                            
                                            yield return new WaitForSeconds(tick);
                                        }
                                    }
                                }
                            
                             
                            • Павел Наконечный 15:01 on 11.06.2017 Permalink | Reply  

                              MarkLight и NoesisGUI | Unity UI Frameworks 

                              Здорово устав с нативным Unity UI, я начал искать сторонние UI framework’и под этот движок. На своем протестировал многое, еще большее не заработало вовсе или оказалось ужасным. Потому мой взор пал на две системы: MarkLight и NoesisGUI.

                              По сути, они очень похожи, но NoesisGUI является интерпретацией популярного WPF (XAML), также доступного под C++ и нативный C#, а MarkLight – самописный XML парсер, рендерящий это в Unity UI. В этом и вся разница. А ведь если в интернете есть сотни статей по WPF, то зачем делать свою документацию? Потому у NoesisGUI ее практически нет.

                              MarkLight тоже, как выяснилось, не блещет. Никакого тебе динамичного контента (вроде добавления элементов на ходу) или подбора значений существующих из объектов своего класса. Для кодера это будет сущий ад, зато дизайнер вас крепко поблагодарит. Но, увы, не наш вариант. Для каждой кнопки вам придется завести по 5-10 переменных и OnClick функции, чтобы связать ее с существующей системой. По поддержке: есть Slack на 180 человек, но искать себе советника придется самостоятельно средь них, ведь канал все давно замутили (или просто не заходят в сеть).

                              NoesisGUI выглядит более солидно. По нему есть пара невнятных устаревших туториалов на Youtube. Версия с AssetStor’а устарела на целых 5 релизов (1.8 и 2.2). Но на самом деле – он еще более пространный, чем MarkLight. Вся документация, связанная с Unity состоит из 3 статей, из которых одна – обзорное руководство по Blend от Microsoft.

                              Действительно, форум есть. В течение дня вам даже ответят. Но не спрашивать же каждую мельчайшую вещицу у разработчиков?

                              Потому, посмотрев на все это дело, потыкав его руками, я предпочел вернуться к неудобному, но рабочему Unity UI. Возможно, я еще протестирую PowerUI, но после такого опыта тратить деньги как-то совсем не хочется. Возможно, мне просто не хватило опыта дизайнера, который сверстал бы неплохой дизайн и в нативном Unity UI, не знаю.

                               
                              • Павел Наконечный 12:17 on 13.05.2017 Permalink | Reply  

                                Обзор Qubicle Voxel Editor 

                                Личный опыт

                                Около двух недель назад для своих нужд в игрострое приобрел воксельный редактор Qubicle. В целом, он мне понравился. Могу с гордостью сказать, что это простейший инструмент для 3D моделлинга.

                                Увы, но он мне не особо помог, так как любое моделирование (даже в таких простых инструментах) требует нешуточных временных затрат. Освоение редактора не заняло особо много времени, но сам процесс создания – долгий и нудный. Нескольких моделей, что я склепал за неделю никак не хватит для игры, а расширение команды не всегда лучшее решение.

                                Функционал

                                Редактор поддерживает экспорт во все главные форматы (с дальнейшим импортом в ведущие игровые движки), нарезку моделей на части для их последующей анимации, текстурирование и многое другое.

                                К управлению вам придется привыкать, но это займет не более суток, есть некоторые глюки, а также неисправимые минусы, например то, как увеличивается модель при scale (даже в целых числах).

                                Потому хочу сказать, что если вы делаете игру, ориентируясь на воксельную графику, то не делайте ее самостоятельно. Гораздо проще потратить 20$ в Asset Store на хорошие модели (7 лучших Unity Assets), нежели чем тратить 90% времени на создание графики, многое из которой придется выкинуть за ненадобностью или ненадлежащим качеством.

                                Несмотря на это, с использованием Qubicle были созданы такие проекты, как стратегия StoneHearth или CrossyRoad, поразившая мобильные рынки не так давно.

                                Выводы

                                Если вы все же хотите сделать всю графику самостоятельно, но при этом максимально сократить время на разработку, то Qubicle – ваш вариант. Трезво оценивайте свои силы, чтобы не потратить деньги и силы зря. В любом случае, вам все еще будет нужен специалист по анимации в Blender’е, даже если вы купите готовые asset’ы. GameDev – не самый легкий метод наживы.

                                 
                                • Павел Наконечный 16:52 on 26.04.2017 Permalink | Reply
                                  Tags: assets, ,   

                                  7 Best Assets for Unity 

                                   Recently I’ve been asked to make a list of my favourite Unity assets. So, to begin with, these are 7 of my favourites!


                                  NGUI

                                  1. NGUI– as Unity GUI is not that great and Unity 4.6 is still no there you should have a frameworks to make good and robust GUIs. NGUI has evolved greatly since it was released and I can tell that I am a big fan of this framework.

                                  Purpose: User Interface Framework

                                  Great alternatives: Daikon Forge GUI,  Autodesk Scaleform (cool, expensive and complex)Verdict: MUST HAVE   It may be not very intuitive at first but support, documentation and community are awesome. It allows you to implement GUI of almost any complexity.


                                  uTomate

                                  2. uTomate – this one is my favourite. It allows you to automate almost every process in Unity. In my case it allows to make 10 builds for different platforms in one button click. Tool is also extensible. First thing when you start a production project – buy this one, it is worth every penny spent on it.

                                  Purpose: Editor processes automation. (Builds, baking lightmaps, scene and objects manipulation, etc.)
                                  Verdict: MUST HAVE

                                  SmoothMoves

                                  3. SmoothMoves – despite having some minor drawbacks this asset will help you to animate easily. Especially useful when you need to animate 2D Characters. It provides really convenient editor. Big plus – integration with Playmaker.

                                  SmoothMoves Animation Editor

                                  SmoothMoves Animation Editor

                                  Purpose: 2D Skeletal animation Tool. Great Alternatives: Puppet2D Verdict: Useful when using skeletal 2D animations


                                  4. Editor Console Pro– the default console if very inconvenient – no filtering, no coloring, almost nothing. So this one is a huge time saver – it provides a highly configurable console with all the info you need.

                                  Editor Console Pro

                                  Verdict: MUST HAVE for medium and large projects.


                                  5. Playmaker– one of the most famous and widely used assets from the Assets Store. Why? Because it is awesome. It’s a visual scripting editor which consists of state machines and events. It can be used to write a complete game without a single line of code or it can be easily integrated into existing project to simplify some routine work.

                                  Playmaker

                                  Great Alternatives: uScript Visual Scripting Tool

                                  Verdict: Situational but highly recommended for projects with state machines.


                                  6. SoundManagerPro 3 – A sound manager that deals with almost everything related to managing  music and sounds. Big plus – integration with NGUI and Playmaker.Great Alternatives: Easy Sound Manager – simple and lightweight sound manager (much simple and only $2).

                                  Verdict: Situational but highly recommended for projects with complex audio solution.


                                  7. iOS Native and Android Native – the simplest and the best documented assets that provide integration with all iOS and Android features you can ever need. The support is great and fast. Absolutely must have for seamless iOS and Android integration.

                                  Verdict: Situational but highly recommended for projects with iOS and Android Native feature. Even though there are lot’s of alternatives these two will save you lots time.

                                   
                                  • Павел Наконечный 16:44 on 26.04.2017 Permalink | Reply
                                    Tags: , tips,   

                                    Лучшие советы: 10 вещей, которые вы не знали о Unity. 

                                    Евангелист Unity-сообщества делится самыми неизвестными секретами движка.

                                    Дабы начать нашу новую регулярную рубрику – Лучшие советы Девелоперам – мы поговорили с Unity Technologies, дабы узнать о лучших секретах движка.

                                    TOP TIPS: THINGS TO TRY IN UNITY

                                    1) Начинающие разработчики часто забывают, что они в режиме игры. Зайдите в ‘Preferences’ -> ‘Colours’ -> ‘Playmode Tint’ и смените их на более запоминаемый цвет.

                                    2) Чтобы упростить позиционирование камеры, найдите угол, который хотите видеть, в меню навигации, выберите камеру и кликните ‘Align with View’ или используйте шорткат Ctrl/Cmd+Shift+F.

                                    3) Не можете найти ассет в Project View? Наберите условия поиска, затем смените поиск с Assets на Asset Store. Вы сможете увидеть превью ассетов даже не открывая их.

                                    4) Когда вращаете объект, держите Ctrl/Cmd, чтобы вращать целыми числами. Этот же метод действует с передвижением объекта. Величины могут быть изменены в меню Edit в пункте Snap Settings.

                                    5) При удержании кнопки V, вы можете выбирать и ставить объекты, используя vertex позиционирование. Это может быть очень полезно при создании игр из модульной геометрии.

                                    6) По нажатию голубого ‘?’ около компонента автоматически откроет вам документацию по нему.

                                    7) Нашли идеальные значения в Playmode? Нажмите небольшой винтик в правом верхнем углу компонента в инспекторе и выберите “Copy component”. Вы сможете вставить эти значения после выхода из режима игры.

                                    8) Используйте кнопку “Layers”, чтобы отображать и скрывать слои. Например, вы могли создать слой для объектов вроде спавнов и скрыть их слой.

                                    9) В profiler разноцветные квадраты около обзорных вещей – Drawcalls, Scripts, Rendering, VSync и т.д., являются кнопками. Вы можете выключить ненужные элементы.

                                    10) Вам не нравится вид окон по умолчанию? Смените его на любой другой или соберите сами, а затем сохраните, чтобы с легкостью к нему вернуться.

                                    Есть еще советы? Поделитесь ими в комментариях ниже.

                                     
                                    • Павел Наконечный 15:17 on 19.04.2017 Permalink  

                                      Twine 2 | Обзор 

                                       

                                      Думая о том, что мне лучше найти инструмент для создания текстовых игр заранее, а не ломать ногти, когда приспичит, а также удерживая в голове мысль о том, что не нужно писать движки самому, я серфил Web и наткнулся на Twine.

                                      Ни о чем не говорящий логотип.

                                      После недавнего провала с Inky (который отказывался работать вовсе) я обрадовался новому (работающему) инструменту. Но радость моя довольно быстро прошла.

                                      Если два параграфа связаны несколькими ссылками, то связь не отображается вовсе.

                                      Баги, отсутствие возможностей выйти за рамки, недостатки компиляции в HTML (а это ставит крест на коммерческой разработке без Electron’а). Сохранения историй работают через раз, редактор закрывается только через Дисп. задач.

                                      Вы серьезно?

                                      Несмотря на это, я бы не назвал Twine плохим. Более того, он идеален для человека, не знающего и не желающего знать языки программирования (даже скриптовые, вроде qsp).

                                      Да, информацию о нем приходится выуживать с официальной wiki, так как она разбросана по огромному количеству различных страниц (а еще есть несколько вариантов внутреннего скриптового языка).

                                      Можно выделить как плюс, наличие различных хостов, адаптированных под Twine. Тот самый пресловутый экспорт под web (однако отсутствие nativ’а тоже огорчает).

                                      Да, мне этого будет достаточно для небольшой игры на Паровозик, но связывать крупные (возможно коммерческие) проекты с Twine я бы не советовал.

                                      Опять же, самописные движки всегда стабильнее и подстроены индивидуально под вас.

                                      Всегда ваш,

                                      SneakBug8

                                       
                                      • Павел Наконечный 19:41 on 11.04.2017 Permalink | Reply  

                                        Unity Collaboration | Обзор 

                                         

                                        Хотелось бы поговорить о том, что может предложить нам Beta система контроля версий Unity Collaboration. Обзор создан на момент версии Unity 5.6.

                                        Во-первых, он еще не доработан. Серьезных багов я не заметил, но мелких глюков – предостаточно. Кратковременно теряет репозиторий, не видит коммитов на удаленке, не замечает измененных файлов, все это действует на нервы.

                                        Во-вторых, присутствуют существенные ограничения бесплатной версии. Это явный минус перед тем же GitLab, обладающим самым широким спектром бесплатных услуг среди конкурентов.

                                        В-третих, скорость выше. По скорости pull и push на сервер Collab обходит конкурентов (Unity 1.5-2 мб/сек против Gitlab 500 кб/сек). Это явный плюс для больших проектов.

                                        В-четвертых, с Unity Collab проще. Для радового разработчика, не имеющего глубоких познаний cvs, Unity Collaboration станет мягким введением в среду инструментов коллаборации проектов.

                                        С другой стороны, более классические решения (git, svn, mercurial) дают гораздо более удобный интерфейс, особенно учитывая многообразие GUI и CLI решений. Веб-панель любого из большой тройки (Github, Bitbucket, Gitlab) проще и понятнее, чем у Unity (в которой даже нельзя увидеть остаток свободного места под проект).

                                        Source: Blog

                                         
                                        • Павел Наконечный 19:26 on 31.03.2017 Permalink | Reply  

                                          Подборка руководств по MonoGame 

                                          Подборка статей по работе с MonoGame:

                                          Defeat of the Spanish Armada, by Philippe-Jacques de Loutherbourg

                                          Source: Blog

                                           
                                          c
                                          Compose new post
                                          j
                                          Next post/Next comment
                                          k
                                          Previous post/Previous comment
                                          r
                                          Reply
                                          e
                                          Edit
                                          o
                                          Show/Hide comments
                                          t
                                          Go to top
                                          l
                                          Go to login
                                          h
                                          Show/Hide help
                                          shift + esc
                                          Cancel