コガネブログ

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

2019-10-01から1ヶ月間の記事一覧

【Unity】スプライトを Sliced や Tiled で引き伸ばした時に Collider のサイズを簡単に合わせる方法

概要 例えば Collider がアタッチされたスプライトを Sliced にして横に引き伸ばした場合、 スプライトは引き伸ばされて表示されますが、Collider のサイズは変わりません しかし、Collider の Auto Tiling をオンにすると 引き伸ばされたスプライトに合わせ…

【Unity】Mathf.SmoothDamp で Time.timeScale を無視する方法

概要 var result = Mathf.SmoothDamp ( current: current, target: target, currentVelocity: ref currentVelocity, smoothTime: smoothTime, maxSpeed: maxSpeed, deltaTime: Time.unscaledDeltaTime // ★ ); Mathf.SmoothDamp の第6引数に Time.unscaledDe…

【Unity】TextMesh Pro でハイパーリンクが正常に動作しない場合

概要 Canvas の Render Mode が Screen Space - Overlay の場合は var index = TMP_TextUtilities.FindIntersectingLink( text, position, null ); TMP_TextUtilities.FindIntersectingLink の第3引数に null を設定します Canvas の Render Mode が Screen …

【Unity】【Odin Inspector】interface を Inspector でアタッチできるようにする方法

はじめに Odin Inspector を Unity プロジェクトに導入することで interface を Inspector でアタッチできるようになります 概要 public interface ICharacter { void Log(); } 例えば ICharacter インターフェイスを定義して、 using UnityEngine; public c…

【Unity】ワールド座標を Screen Space - Camera の Canvas 内のローカル座標に変換する関数

ソースコード using UnityEngine; public static class CameraUtils { /// <summary> /// ワールド座標を Screen Space - Camera の Canvas 内のローカル座標に変換します /// </summary> /// <param name="worldCamera">ワールド座標を描画するカメラ</param> /// <param name="canvasCamera">Canvas を描画するカメラ</param> /// <param name="canvasRectTransform">Canvas …</param>

【Unity】ワールド座標を Screen Space - Overlay の Canvas 内のワールド座標に変換する関数

ソースコード using UnityEngine; public static class CameraUtils { /// <summary> /// ワールド座標を Screen Space - Overlay の Canvas 内のワールド座標に変換します /// </summary> /// <param name="worldCamera">ワールド座標を描画するカメラ</param> /// <param name="worldPosition">変換前のワールド座標</param> /// <returns>変換後のワールド座標</returns>…

【Unity】Script 'XXXX' will not be compiled because it exists outside the Assets folder and does not to belong to any assembly definition file.

概要 Script 'XXXX' will not be compiled because it exists outside the Assets folder and does not to belong to any assembly definition file. Packages に存在するスクリプトが Assembly Definition File に属していない場合 上記の警告が出力されま…

【Unity】Console ウィンドウの Collapse や Clear on Play などのオン・オフをスクリプトから変更する方法

ソースコード using System; using System.Reflection; using UnityEditor; public static class ConsoleWindowUtils { public enum ConsoleFlags { Collapse = 1 << 0, ClearOnPlay = 1 << 1, ErrorPause = 1 << 2, Verbose = 1 << 3, StopForAssert = 1 <<…

【Unity】Unity 2019.2 以降なら Tilemap の Tile Palette で選択されているパレットをスクリプトから取得・設定できる

概要 using UnityEditor; using UnityEditor.Tilemaps; using UnityEngine; public static class Example { [MenuItem( "Tools/Log" )] private static void Log() { // 選択中のパレットを取得する Debug.Log( GridPaintingState.palette ); // 選択中のパ…

【Unity】Unity 2019.2 以降なら Tilemap の Tile Palette で選択されているブラシをスクリプトから取得・設定できる

概要 using System; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEditor.Tilemaps; using UnityEngine; // Tile Palette で使用できるすべてのブラシを管理するクラス public static class GridPaletteBrush…

【Unity】Unity 2019.2 以降なら Tilemap の Tile Palette の Active Tilemap をスクリプトから取得・設定できる

概要 using UnityEditor; using UnityEditor.Tilemaps; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { // Active Tilemap が変更された時に呼び出される GridPaintingState.scenePaintTargetChanged += OnChange…

【Unity】文字列補間を使用する場合も ToString を付けたほうが GC Alloc は少なくなる

概要 using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { private void Update() { int num1 = 1; int num2 = 2; // ToString あり var sampler1 = CustomSampler.Create( "ToString あり" ); sampler1.Begin(); var …

【Unity】EditorUtility.RevealInFinder でフォルダを開こうとすると上の階層が開いてしまう

概要 using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { EditorUtility.RevealInFinder( "Assets" ); } } 例えば EditorUtility.RevealInFinder で Assets フォルダを開こうとすると Assets フォ…

【ReSharper】メソッドチェーンを改行した時のインデントの長さを変更する方法

概要 Visual Studio メニューの「RESHARPER > Options」から 「Code Editing > C# > Formatting Style > Tabs, Indents, Alignment」を選択して 「Chained method calls」を オンにするとこうなります オフにするとこのようになります

【Unity】Tilemap オブジェクトが選択されたら Tile Palette の矩形ツールを選択状態にするエディタ拡張

ソースコード using System; using System.Reflection; using UnityEditor; using UnityEditorInternal; using UnityEngine.Tilemaps; public static class GridPaintPaletteWindowUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static |…

【Unity】現在のエディタの編集モードを取得するエディタ拡張

概要 using UnityEditor; using UnityEditorInternal; using UnityEngine; public static class Example { [MenuItem("Tools/Hoge")] private static void Hoge() { Debug.Log( EditMode.editMode ); } } EditMode.editMode で現在のエディタの編集モードを…

【Unity】Collider や LineRenderer などの編集が開始した・終了したかどうかを検知するエディタ拡張

概要 using UnityEditor; using UnityEditorInternal; using UnityEngine; [InitializeOnLoad] public static class Example { static Example() { EditMode.onEditModeStartDelegate += OnEditModeStartDelegate; EditMode.onEditModeEndDelegate += OnEdit…

【Unity】Tilemap の Tile Palette で選択されているツールをスクリプトから変更する方法

ソースコード using System; using System.Reflection; using UnityEditor; public static class GridPaintPaletteWindowUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic; privat…

【Unity】Tilemap の Tile Palette は内部的には GridPaintPaletteWindow という EditorWindow

概要 Tilemap の Tile Palette は内部的には GridPaintPaletteWindow という EditorWindow で構成されています Unity エディタを開発者モードにすることで確認できます 関連記事

【Unity】Tilemap の Tile Palette で選択されているブラシをスクリプトから変更する方法

ソースコード using System; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEngine; public static class GridPaintingStateUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | Bindin…

【Unity】Tilemap の Tile Palette に登録されているすべてのブラシを取得する方法

ソースコード using System; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEngine; public static class GridPaletteBrushesUtils { private const BindingFlags BINDING_ATTR = BindingFlags.Static | Bindi…

【Unity】Tilemap で Tile Palette のブラシが変更された時に呼び出されるイベント

ソースコード using System; using System.Reflection; using UnityEditor; using UnityEngine; public static class EditorApplicationUtility { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Public; private static re…

【Unity】Tilemap で Tile Palette の Active Tilemap が変更された時に呼び出されるイベント

ソースコード using System; using System.Reflection; using UnityEditor; using UnityEngine; public static class EditorApplicationUtility { private const BindingFlags BINDING_ATTR = BindingFlags.Static | BindingFlags.Public; private static re…

【Unity】Tilemap が複製された時に、複製された Tilemap を Tile Palette の Active Tilemap に自動で設定するエディタ拡張

概要 Tilemap が複製された時は Tile Palette の Active Tilemap は変化しないですが using System.Reflection; using UnityEditor; [InitializeOnLoad] public static class Example { static Example() { EditorApplication.hierarchyChanged += OnChanged…

【Unity】Tilemap で Tile Palette の Active Tilemap をスクリプトから変更する方法

概要 using System.Reflection; using UnityEditor; public class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var assembly = typeof( AssetDatabase ).Assembly; var type = assembly.GetType( "UnityEditor.GridPaintingState" )…