コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】スプライトからメッシュを生成するスクリプト

ソースコード using System; using System.Linq; using UnityEngine; public static class SpriteUtils { public static Mesh SpriteToMesh( Sprite sprite ) { var mesh = new Mesh(); mesh.SetVertices( Array.ConvertAll( sprite.vertices, x => ( Vector…

【おすすめスライド】「なるほど3Dグラフィック描画の仕組み」

スライド https://monolizm.com/sab/pdf/%E7%AC%AC%E4%B8%89%E5%9B%9E_%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99(%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A93D%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E6%8F%8F%E7%94%BB%E3%81%A…

【おすすめスライド】「RENDERING 最適化「禍つヴァールハイト」」

スライド

【Unity】変更した GUI.color を簡単に元に戻せるクラス

ソースコード using System; using UnityEngine; public sealed class GUIColorScope : IDisposable { private readonly Color m_oldColor; public GUIColorScope( Color color ) { m_oldColor = GUI.color; GUI.color = color; } public void Dispose() { G…

【Unity】ボタンが押されて縮小した時に、当たり判定のサイズも一緒に縮小する現象を避けるためのコンポーネント「UniUIColliderSizeAdjuster」を GitHub に公開しました

リポジトリ 使用例 using Kogane; using UnityEngine; using UnityEngine.EventSystems; public class Example : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { private UIColliderSizeAdjuster m_adjuster; private void Awake() { m_adjuster …

【Unity】エディタ拡張の OnGUI で表示する項目を無効化する「EditorGUI.DisabledScope」

概要 using UnityEditor; using UnityEngine; public sealed class Example : EditorWindow { [MenuItem( "Tools/Open" )] private static void Open() { GetWindow<Example>(); } private void OnGUI() { GUILayout.Button( "ボタン" ); using ( new EditorGUI.Disab</example>…

【Unity】SkipLast、TakeLast を使えるようにするソースコード

ソースコード

【Unity】Project ビューの検索欄に文字列を設定するエディタ拡張

ソースコード using System.Reflection; using UnityEditor; public static class ProjectBrowserInternal { public static void SetSearch( string searchString ) { var assembly = typeof( Editor ).Assembly; var projectBrowserType = assembly.GetType…

【Unity】エディタ拡張からゲームオブジェクトの名前変更モードにするスクリプト

ソースコード using System.Reflection; using UnityEditor; public static class SceneHierarchyInternal { public static void RenameGO() { var assembly = typeof( EditorWindow ).Assembly; var sceneHierarchyWindowType = assembly.GetType( "UnityEd…

【Unity】Unity 2020.2 新機能 - 配列やリストを Inspector で並べ替えられるようにする「Reorderable」属性

概要 using System.Collections.Generic; using UnityEngine; public class Example : MonoBehaviour { [Reorderable] public string[] m_names; [Reorderable] public Vector3[] m_positions; [Reorderable] public List<Color> m_colors; } 参考サイト様</color>

【Unity】Unity 2020.1 新機能 - RectMask2D でソフトマスクが使用できるようになった

概要

【Unity】Unity 2020.1 新機能 - Console ウィンドウのログが複数選択可能 + コピーできる

概要 ピカチュウ UnityEngine.Debug:Log (object) Example:Awake () (at Assets/Example.cs:9) ピカチュウ UnityEngine.Debug:Log (object) Example:Awake () (at Assets/Example.cs:9) ピカチュウ UnityEngine.Debug:Log (object) Example:Awake () (at Ass…

【Unity】Unity 2020.1 新機能 - Inspector で Vector、Color、UnityEngine.Object、Gradient、AnimationCurve などがコピペできるようになった

概要 using UnityEngine; public class Example : MonoBehaviour { public Vector3 m_vector; public Color m_color; public Example m_example; public Material m_material; public Gradient m_gradient; public AnimationCurve m_curve; }

【Unity】Unity 2020.1 新機能 - ビルド時にプリプロセッサ定義を指定できる「BuildPlayerOptions.extraScriptingDefines」

概要 Unity 2020.1 以前 using UnityEditor; [InitializeOnLoad] public static class Example { static Example() { PlayerSettings.SetScriptingDefineSymbolsForGroup ( BuildTargetGroup.Android, "ENABLE_RELEASE;ENABLE_OFFLINE" ); var options = new…

【Unity】Unity 2020.1 新機能 - .unitypackage でインポートしたアセットの一覧を取得できる「onImportPackageItemsCompleted」

概要 using UnityEditor; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { AssetDatabase.onImportPackageItemsCompleted += paths => { foreach ( var path in paths ) { Debug.Log( path ); } }; } }

【Unity】Unity 2020 新機能 - ゲームオブジェクトの Cut & Paste が可能

概要 (Unity 2020.1 で追加されたか 2020.2 で追加されたかは未確認) Ctrl + X、Ctrl + V でも使用可能

【Unity】Unity 2020 新機能 - コンポーネントの Inspector を別窓で表示できる

概要 (Unity 2020.1 で追加されたか 2020.2 で追加されたかは未確認) コンポーネントを右クリックして「Properties...」を選択すると そのコンポーネントの Inspector を別窓で表示できる

【Unity】Unity 2020 新機能 - Image や Text で Raycast Target の範囲を調整できる「Raycast Padding」

概要 (Unity 2020.1 で追加されたか 2020.2 で追加されたかは未確認) Image や Text などの UI オブジェクトに Inspector に 「Raycast Padding」が追加されており、これに負数を設定すると 当たり判定の領域を広げることができる

【Unity】Unity 2020.1 新機能 - ゲームオブジェクトやアセットを複製する時の連番の付き方を設定できる

概要 Game Object Naming:ゲームオブジェクト複製時の連番の付き方 Game Object Digits:ゲームオブジェクト複製時の連番の桁数 Space Before Number in Asset Names:アセット複製時に連番の前に半角スペースを入れるか

【Unity】Unity 2020.1 新機能 - Sprite Atlas バージョン2が追加された(実験段階)

概要 詳細は https://docs.unity3d.com/2020.1/Documentation/Manual/SpriteAtlasExperimental.html

【Unity】Unity 2020.2 新機能 - Scripting Define Symbols が並び替え可能なリストの表示形式に変更された

概要 並び替えが可能になった 「Copy Defines」ボタンを押すとセミコロン区切りの文字列でコピーできる 例:ODIN_INSPECTOR;ENABLE_RELEASE;ENABLE_OFFLINE セミコロン区切りの文字列を貼り付けて Apply することも可能

【ReSharper】配列の for 文を簡単に記述できる Live Template

使い方 itar と記述することで、配列の for 文を簡単に記述できます

【ReSharper】Dictionary.TryGetValue の if 文を簡単に記述できる Source Template

ソースコード using JetBrains.Annotations; using System.Collections.Generic; public static class SourceTemplates { [SourceTemplate] [Macro( Target = "key" )] [Macro( Target = "value" )] public static void tryGetValue<TKey, TValue>( this Dictionary<TKey, TValue> self )</tkey,></tkey,>…

【Slack】ポケモンの色合いをもとに Slack のカラーテーマを作成できる「Pokéslack」紹介

概要 上記のサイト様でポケモンの色合いをもとに Slack のカラーテーマを作成できます

【ReSharper】static コンストラクタを簡単に記述できる ReSharper の Live Template

ソースコード 使用例

【Unity】Vector2 や Vector3 の等値演算子は 0.00001 までの誤差を許容している

概要 公式ドキュメントによると Vector2 や Vector3 の等値演算子は 0.00001 までの誤差を許容しているとのこと Vector2: https://docs.unity3d.com/ScriptReference/Vector2-operator_eq.html Vector3: https://docs.unity3d.com/ScriptReference/Vector3-o…

【Unity】[LicensingClient] Licenses Updated successfully in LicensingClient

概要 [LicensingClient] Licenses Updated successfully in LicensingClient Jenkins からビルドを走らせようとしたら上記のログで処理が止まっていた 手動で Unity プロジェクトを一度起動してから再度 Jenkins のビルドを実行したら 上記のログで止まるこ…

【Unity】TryGetComponent の if 文を簡単に記述できる ReSharper の Live Template

ソースコード 使用例

【Unity】EditorApplication.LockReloadAssemblies のスコープを管理するクラス

ソースコード using System; using UnityEditor; public sealed class LockReloadAssembliesScope : IDisposable { public LockReloadAssembliesScope() { EditorApplication.LockReloadAssemblies(); } public void Dispose() { EditorApplication.UnlockRe…

【Unity】AssetDatabase.StartAssetEditing のスコープを管理するクラス

ソースコード using System; using UnityEditor; public sealed class AssetEditingScope : IDisposable { public AssetEditingScope() { AssetDatabase.StartAssetEditing(); } public void Dispose() { AssetDatabase.StopAssetEditing(); } }