コガネブログ

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

【Unity】ランタイムで Scenes In Build に登録されているすべてのシーンのパスを取得する方法

概要 public static IEnumerable<string> GetAllScenePathInBuildSettings() { for ( int i = 0; i < SceneManager.sceneCountInBuildSettings; i++ ) { yield return SceneUtility.GetScenePathByBuildIndex( i ); } } 参考サイト様</string>

【Unity】ゲーム実行中に Texture2D を Sprite に変換して使用する方法

ソースコード using UnityEngine; public static class Texture2DExt { public static Sprite ToSprite( this Texture2D self ) { var rect = new Rect( 0, 0, self.width, self.height ); var pivot = Vector2.one * 0.5f; var newSprite = Sprite.Create( …

【Unity】Package Manager で追加したパッケージの .csproj を生成する方法

概要 Unity メニューの「Edit > Preferences」から 「External Tools」の「Generate all .csproj files.」をオンにして ソリューションファイルを再生成する

【Unity】Image の Use Sprite Mesh をデフォルトでオンにする方法

概要 Image の Use Sprite Mesh をオンにした状態で 赤枠のアイコンを押して Select Preset ウィンドウで「Save current to...」ボタンを押して ダイアログが表示されたらプリセットを保存するフォルダと ファイル名を設定して「保存」を押して Project ビュ…

【Unity】Canvas Scaler のデフォルト値をプリセットで統一する

概要 Canvas Scaler の UI Scale Mode や Reference Resolution を設定した状態で 赤枠のアイコンを押して Select Preset ウィンドウで「Save current to...」ボタンを押して ダイアログが表示されたらプリセットを保存するフォルダと ファイル名を設定して…

【Unity】Canvas Renderer の Cull Transparent Mesh をデフォルトでオンにする方法

概要 Canvas Renderer の赤枠のアイコンを押して Select Preset ウィンドウで「Save current to...」ボタンを押して ダイアログが表示されたらプリセットを保存するフォルダと ファイル名を設定して「保存」を押して Project ビューで作成されたプリセットを…

【Unity】uGUI のオブジェクト作成時に Raycast Target をデフォルトでオフにする方法

概要 例えば uGUI の Image の Raycast Target をデフォルトでオフにしたい場合は Image コンポーネントの赤枠のアイコンを押して Select Preset ウィンドウで「Save current to...」ボタンを押して New Preset ダイアログで保存するフォルダとファイル名を…

【C#】Conditional 属性でシンボルが定義されている場合に関数を無効化する方法

概要 using UnityEngine; public class Example : MonoBehaviour { private void Update() { Log( "ピカチュウ" ); } #if DISABLE_DEBUG_LOG [System.Diagnostics.Conditional( "DUMMY" )] #endif private void Log( string message ) { Debug.Log( message …

【Unity】ログ出力にタグを付与できる独自クラス

スクリプト 使用例 using UnityEngine; public class Example : MonoBehaviour { private readonly CustomLogger m_logger = CustomLogger.Create( "タイトル" ); private void Awake() { m_logger.Log( "Log" ); m_logger.Log( "Log", gameObject ); m_logg…

【Unity】CustomSampler を using で使用できるようにするクラス

ソースコード 使用例 通常 using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { private void Update() { var sampler = CustomSampler.Create( "AAAAA" ); sampler.Begin(); // ... sampler.End(); } } CustomSampler…

【Unity】Unityプロ向けの情報がまとめられているサイト「Unity for Pro」

リンク

【Unity】AnimationCurve の設定範囲を 0 から 1 に制限できるエディタ拡張

ソースコード using UnityEngine; public sealed class Curve01Attribute : PropertyAttribute { } using UnityEditor; using UnityEngine; [CustomPropertyDrawer( typeof( Curve01Attribute ) )] public sealed class Curve01Drawer : PropertyDrawer { pu…

【Unity】IPointerClickHandler などで右クリックされたかどうかを確認する方法

概要 using UnityEngine; using UnityEngine.EventSystems; public class Example : MonoBehaviour, IPointerClickHandler { public void OnPointerClick( PointerEventData eventData ) { if ( eventData.button == PointerEventData.InputButton.Right ) {…

【Unity】プロジェクトのアップデート後にすべてのアセットをシリアライズし直す方法

概要 Unity のプロジェクトをアップデートした場合、 基本的にはすべてのアセットは古いバージョンの形式で保存されたままになります そして、アセットを変更して保存すると、 そのアセットのみが新しいバージョンの形式で保存されます そのため、Unity プロ…

【Unity】特定のフォルダ内のアセットを編集して保存できないようにするエディタ拡張

概要 例えば上記のスクリプトを Unity プロジェクトの Editor フォルダに追加すると Assets/Folder1 Assets/Folder2 これらのフォルダ以下に存在するアセットは編集して保存できないようになります

【Unity】特定のフォルダ内のアセットが他のフォルダに移動しないようにするエディタ拡張

概要 例えば上記のスクリプトを Unity プロジェクトの Editor フォルダに追加すると 「@Project」フォルダ内のアセットを「@Project」フォルダ外に移動したり、 「@Project」フォルダ外のアセットを「@Project」フォルダ内に移動したりできなくなります

【Unity】Array.Contains と HashSet.Contains の速度比較

検証用スクリプト using System.Collections.Generic; using System.Diagnostics; using System.Linq; using UnityEngine; using Debug = UnityEngine.Debug; public class Example : MonoBehaviour { private void Start() { var count = 10000; var value …

【Unity】HashSet を JsonUtility でシリアライズ・デシリアライズするサンプル

ソースコード using System; using System.Collections.Generic; using UnityEngine; [Serializable] public sealed class Example : ISerializationCallbackReceiver { [SerializeField] private int[] m_array = null; private HashSet<int> m_hashSet; public </int>…

【Unity】SceneManager.sceneLoaded が呼び出されるタイミング

概要 Awake OnEnable SceneManager.sceneLoaded Start

【Unity】ScriptableObject(.asset)を ProjectSettings フォルダに保存・読み込みしたい場合

概要 ScriptableObject(.asset)は ProjectSettings フォルダ以下に保存・読み込みができないが、 下記のスクリプトのように JSON 形式に変換することで保存・読み込みができる 参考サイト様

【Unity】Particle System の Inspector で未使用のモジュールを非表示にする方法

概要 Particle System の Inspector で「+」ボタンを押して 「Show All Modules」をオフにすると 未使用のモジュールは非表示にできます この状態で使用するモジュールを追加したい場合は 「+」ボタンから追加したいモジュールを選択します 参考ツイート様 W…

【Unity】Unity 2019.3 のエディタで使用されているフォントを 2019.2 以前のものに変更する方法

概要 Unity メニューの「Edit > Preferences...」から 「General」の「Editor Font」を変更することで エディタのフォントを 2019.2 以前のものに変更できます 参考ツイート様 #unitytips #unity3d Over time, I'm still not used to using the new Unity 20…

【Unity】Transform からすべての子オブジェクトを取得する方法

概要 using System.Collections.Generic; using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var children = new List<Transform>(); foreach ( Transform child in transform ) { children.Add( child ); } } } 上記のようなスクリプ</transform>…

【Unity】Vector2 や Vector3 の ToString では小数部の桁数を指定できる

概要 using UnityEngine; public class Example : MonoBehaviour { private void Awake() { var vec = new Vector3( 1.234f, 5.678f, 9.012f ); // (1.2, 5.7, 9.0) Debug.Log( vec.ToString() ); // (1.2340, 5.6780, 9.0120) Debug.Log( vec.ToString( "F4…

【Unity】Particle System の再生が終了した時にイベントを実行する方法

概要 Particle System の Stop Action を「Callback」にして using UnityEngine; public class Example : MonoBehaviour { public void OnParticleSystemStopped() { print( "ピカチュウ" ); } } OnParticleSystemStopped 関数を定義したスクリプトを Partic…

【Unity】Particle System の再生が終了した時に削除する方法

概要 Particle System の Stop Action を「Destroy」にすることで Particle System の再生が終了した時に自動で削除されるようになります

【Unity】OnParticleSystemStopped が呼び出されない場合

概要 OnParticleSystemStopped 関数が呼び出されない場合は using UnityEngine; public class Example : MonoBehaviour { private void OnParticleSystemStopped() { print( "ピカチュウ" ); } } OnParticleSystemStopped 関数が private になっている可能性…

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

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

【Unity】Scene ビューのカメラの描画範囲を非表示にする方法

概要 Scene ビューのカメラの描画範囲を非表示にしたい場合は Scene ビューの「Gizmos」から Camera のチェックマークをオフにすることで 非表示にできます

【Unity】Inspector で値をドラッグして変更する時に Shift や Alt を押しながらドラッグすると値の増加値が変化する

概要 通常 Shift を押しながらドラッグ 通常よりも値の変化が大きい Alt を押しながらドラッグ 通常よりも値の変化が小さい 参考ツイート You can multiply the Inspector's editing speed by pressing SHIFT (faster) or ALT (slower).>More tips here: htt…