Unity

Отображение поля ScriptableObject в Custom Inspector’е некоторого компонента

Предположим, у нас есть некоторый класс унаследованный от MonoBehaviour, назовём его SODataBehaviour.

using UnityEngine;

namespace Triks.SO {
	public class SODataBehaviour : MonoBehaviour {

		/// <summary>
		/// Экземпляр класса SOData
		/// </summary>
		[SerializeField, Tooltip("Экземпляр класса SOData")]
		private SOData scriptableObjectData;

		/// <summary>
		/// Поле типа int
		/// </summary>
		[SerializeField, Tooltip("Поле типа int")]
		private int someInt = 5;
	}
}

В нём есть поле, тип которого — класс унаследованный от ScriptableObject, его мы назовём SOData.

using UnityEngine;

namespace Triks.SO {

	/// <summary>
    /// Класс характеризующий 
    /// </summary>
	[CreateAssetMenu(menuName = "Triks/SO Data")]
	public class SOData : ScriptableObject {
		
		/// <summary>
        /// Скорость передвижения
        /// </summary>
		[SerializeField, Range(1, 15), Tooltip("Скорость передвижения")]
		private float speed = 1;

		/// <summary>
        /// Возвращает скорость передвижения
        /// </summary>
		public float Speed { 
			get { return speed; }
		}

		/// <summary>
        /// Урон наносимый от контакта
        /// </summary>
		[SerializeField, Range(0.1f, 50), Tooltip("Урон наносимый от контакта")]
		private float contactDamage = 10;

		/// <summary>
        /// Возвращает урон наносимый от контакта
        /// </summary>
		public float ContactDamage {
			get { return contactDamage; }
		}
		
		/// <summary>
        /// Описание данных
        /// </summary>
		[SerializeField, Tooltip("Описание данных")]
		private string description;

		/// <summary>
        /// Возвращает описание данных
        /// </summary>
		public string Description {
			get { return description; }
		}
	}
}

По умолчанию в инспекторе это будет выглядеть так:

(далее…)

Debug.Log() и кто его вызвал

Порой, бывает удобно вывести в консоль отладки полный путь с иерархией в сцене того объекта, который это сообщение вызвал:

А вот как это можно сделать:

using UnityEngine;

public class Test : MonoBehaviour {

	public static string GetHierarchyPath(Component inComponent) {
		if (inComponent) {
			string path = inComponent.name;

			while (inComponent && inComponent.transform.parent) {
				inComponent = inComponent.transform.parent;
				path = inComponent.name + "/" + path;
			}
			return path;
		}	

		return string.Empty;
	}

	void Start () {
		Debug.Log("I am here -> " + GetHierarchyPath(this));				
	}
}

Расширение DebugGraphs для редактора Unity5

Написал я тут на днях плагин DebugGraphs, теперь хочу им поделиться. DebugGraphs — это расширение для редактора Unity позволяющее визуализировать различные данные (например скорости и ускорения объектов, обороты двигателя созданной вами машинки, да что угодно).

С ним нет нужды вычленять из консоли кучу значений выведенных через Debug.Log(), за изменением всех отслеживаемых параметров можно следить визуально и для этого вам даже не придётся писать код :D (но кому очень хочется, такая возможность предусмотрена).

Основные фичи:

  • Легенда для графиков
  • Компонент для добавления графиков без написания кода
  • Настраиваемое количество графиков, их цветов, масштаба и смещения по осям
  • Масштабируемая сетка (масштаб можно менять как отдельно для каждой оси, так одновременно и для них обоих)
  • Автоматическое слежение за новыми точками в Play режиме
  • Открыт исходный код
  • Экспорт графиков в CSV файл

(далее…)

Git и Unity

Для того что бы вести разработку на Unity и использовать при этом Git, следует сделать следующее:

  • Настроить редактор для отображения meta-файлов и для хранения всех изменений в этих meta-файлах:

Git_Unity_1 (далее…)