コガネブログ

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

【Unity】GetComponentInChildren で引数の型情報を文字列で渡せるようにする拡張メソッド

ソースコード using UnityEngine; public static class GameObjectExt { public static Component GetComponentInChildren( this GameObject self, string type, bool includeInactive ) { var com = self.GetComponent( type ); if ( com != null ) return …

【Unity】List からランダムに値を取得して、その値を List から削除する拡張メソッド

ソースコード using System.Collections.Generic; using UnityEngine; public static class ListExt { public static T PopRandomElement<T>( this List<T> self ) { var item = self[ Random.Range( 0, self.Count ) ]; self.Remove( item ); return item; } } 使</t></t>…

【Unity】マテリアルの拡張メソッド「ShaderRenderState.cs」紹介

ソースコード 使用例 var mat = GetComponent<MeshRenderer>().material; mat.SetCull( ShaderRenderState.Cull.Back ); mat.SetZWrite( ShaderRenderState.ZWrite.Off ); mat.SetZTest( ShaderRenderState.ZTest.Greater ); 参考ツイート #unitytipsCustomize shaders ren</meshrenderer>…

【Unity】便利な拡張機能のセット「Unity Extensions」紹介

はじめに 「Unity Extensions」は便利な拡張機能のセットです 使用準備 using Extensions; 拡張メソッドを使用するスクリプトに上記の using を追加します 拡張メソッド一覧 Component // コンポーネントをアタッチ someComponent.AddComponent<MyComponent>(); // コンポ</mycomponent>…

【Unity】【uGUI】RectTransform のピボットの設定を楽にする拡張メソッド

はじめに var t = self.GetComponent<RectTransform>(); var pivot= t.pivot; pivot= new Vector2( 0, 1 ); t.pivot= pivot; RectTransform のピボットを設定する記述が少し冗長に感じたので わかりやすくするための拡張メソッドを作成しました ソースコード using UnityEng</recttransform>…

【Unity】【uGUI】RawImage のテクスチャを変更した時にサイズも更新する拡張メソッド

はじめに var rawImage = GetComponent<RawImage>(); rawImage.texture = texture; rawImage.SetNativeSize(); スクリプトから RawImage のテクスチャを変更する時に 一緒に SetNativeSize 関数を呼び出すことが多かったので これらをまとめた拡張メソッドを作成しまし</rawimage>…

【Unity】【uGUI】Image のスプライトを変更した時にサイズを合わせる拡張メソッド

はじめに var image = GetComponent<Image>(); image.sprite = sprite; image.SetNativeSize(); スクリプトから Image のスプライトを変更する時に 一緒に SetNativeSize 関数を呼び出すことが多かったので これらをまとめた拡張メソッドを作成しました ソースコー</image>…

【Unity】【uGUI】Text の文字列の設定を楽にする拡張メソッド

はじめに var text = GetComponent<Text>(); int score = 25; float time = 0.5f: text.text = score.ToString(); text.text = time .ToString(); スコアやタイムなどの数値を Text で表示する場合、 ToString 関数を呼び出して text に設定する必要があり コーデ</text>…

【Unity】Input.GetKey や Input.GetKeyDown の記述を簡略化する拡張メソッド

ソースコード using UnityEngine; public static class KeyCodeExt { public static bool IsPressing( this KeyCode self ) { return Input.GetKey( self ); } public static bool IsPressed( this KeyCode self ) { return Input.GetKeyDown( self ); } } …

【Unity】【uGUI】RectTransform の幅と高さの取得/設定を楽にする拡張メソッド

はじめに var t = self.GetComponent<RectTransform>(); // 取得 var width = t.sizeDelta.x; var height = t.sizeDelta.y; // 設定 var sizeDelta = t.sizeDelta; sizeDelta = new Vector2( 128, 64 ); t.sizeDelta = sizeDelta; RectTransform の幅と高さと取得、設定する</recttransform>…

【Unity】【uGUI】SpriteAtlas に含まれているすべての Sprite を返す拡張メソッド

はじめに var sprites = new Sprite[ spriteAtlas.spriteCount ]; spriteAtlas.GetSprites( sprites ); SpriteAtlas に含まれているすべての Sprite を取得する場合、 上記のような処理を記述すれば実現できますが 毎回配列を定義するのが大変だったので す…

【Unity】【NGUI】文字列にカラータグを含む場合 true を返す拡張メソッド

using System.Text.RegularExpressions; public static class StringExt { private static readonly Regex COLOR_TAG_PATTERN = new Regex( @"(\[[0-9A-F]{6}\])", RegexOptions.IgnoreCase ); public static bool ContainsColorTag( this string self ) { r…

【Unity】【NGUI】UIRoot の子オブジェクトのグローバル座標を設定する拡張メソッド

using UnityEngine; /// <summary> /// UIWidget 型の拡張メソッドを管理するクラス /// </summary> public static class UIWidgetExt { /// <summary> /// UIRoot の子オブジェクトのグローバル座標を返します /// </summary> public static Vector3 GetGlobalPosition( this Component self ) { i…

【Unity】【NGUI】UIRoot の子オブジェクトのグローバル座標を返す拡張メソッド

using UnityEngine; /// <summary> /// UIWidget 型の拡張メソッドを管理するクラス /// </summary> public static class UIWidgetExt { /// <summary> /// UIRoot の子オブジェクトのグローバル座標を返します /// </summary> public static Vector3 GetGlobalPosition( this Component self ) { i…

【Unity】指定されたオブジェクトの名前を返す、オブジェクトが null の場合は既定値を返す拡張メソッド

using UnityEngine; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static class UnityEngineObjectExt { /// <summary> /// 名前を返します。null の場合は既定値を返します /// </summary> public static string GetNameOfDefault( this UnityEn…

【Unity】指定されたオブジェクトがプレハブではない場合 true を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static partial class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトがプレハブではない場合 true を返します /// </summary> public static bool IsNotPref…

【Unity】指定されたオブジェクトがプレハブの場合 true を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトがプレハブの場合 true を返します /// </summary> public static bool IsPrefab( this UnityEng…

【Unity】指定されたオブジェクトの PrefabType を返す拡張メソッド

using UnityEditor; /// <summary> /// UnityEngine.Object 型の拡張メソッドを管理するクラス /// </summary> public static partial class UnityEngineObjectExt { /// <summary> /// 指定されたオブジェクトの PrefabType を返します /// </summary> public static PrefabType GetPrefabType( th…

【Unity】【Tips】Textで書式指定文字列を設定しやすくする拡張メソッド

using UnityEngine.UI; public static class UITextExtensions { public static void SetText( this Text self, string format, params object[] args ) { self.text = string.Format( format, args ); } } var text = GetComponent<Text>(); text.SetText( "{0}/{</text>…

【Unity】Mathf.Clampの拡張メソッド

using UnityEngine; public static class IntExtensions { public static float Clamp( this int value, int min, int max ) { return Mathf.Clamp( value, min, max ); } } public static class FloatExtensions { public static float Clamp( this float v…

【Unity】NGUIのUISpriteに有効なスプライト名が設定されているかどうかを確認する拡張メソッド

using System.Linq; public static class UISpriteExtensions { /// <summary> /// 有効なスプライト名が設定されている場合 true を返します /// </summary> public static bool IsValidSpriteName( this UISprite self ) { var spriteName = self.spriteName; var spriteList …

【Unity】LineRendererの頂点をVector3型の配列やリストで一括で設定できる拡張メソッド

using UnityEngine; public static class LineRendererExtensions { public static void SetPositions( this LineRenderer self, IList<Vector3> positions ) { self.SetVertexCount( positions.Count ); for ( int i = 0; i < positions.Count; i++ ) { self.SetPosi</vector3>…

【Unity】Plane.Raycastで一時変数を宣言する必要がない拡張メソッド

using UnityEngine; public static class PlaneExtensions { public static float Raycast( this Plane self, Ray ray ) { float enter; self.Raycast( ray, out enter ); return enter; } }

【Unity】無効なコンポーネントがアタッチされているかどうかを返す拡張メソッド

using UnityEngine; using System.Linq; public static class GameObjectExtensions { /// <summary> /// 無効なコンポーネントがアタッチされている場合 true を返します /// </summary> public static bool HasMissingScript( this GameObject self ) { return self .GetCompo…

【Unity】メッセージに書式指定可能なMustExtensions系の拡張メソッド

ソースコード 使い方 nullObj .MustBeNullFormat( "{0}", "メッセージ" ); notNullObj .MustNotBeNullFormat( "{0}", "メッセージ" ); canJump .MustBeTrueFormat( "{0}", "メッセージ" ); isDead .MustBeFalseFormat( "{0}", "メッセージ" ); health .MustB…

【Unity】Component型のインスタンスのnullチェックを省略可能な拡張メソッド

概要 // コンポーネントからBoxColliderを取得する // コンポーネントがnullの場合は何もしない BoxCollider result = null; if ( com != null ) { result = com.GetComponent<BoxCollider>(); } 下記の拡張メソッドを使用することで Component型のインスタンスの上記のよ</boxcollider>…

【Unity】GameObject型のインスタンスのnullチェックを省略可能な拡張メソッド

概要 // ゲームオブジェクトをアクティブにする // ゲームオブジェクトがnullの場合は何もしない if ( go != null ) { go.SetActive( true ); } // ゲームオブジェクトからBoxColliderを取得する // ゲームオブジェクトがnullの場合は何もしない BoxCollider…

【Unity】コンポーネントを破棄する拡張メソッド

ソースコード 使い方 var character = gameObject.GetComponent<Character>(); // 従来の方法 GameObject.Destroy( character ); // 拡張メソッドの方法 character.Destroy(); 関連記事</character>

【Unity】NGUIで使用可能なBBCodeを文字列から削除して返す拡張メソッド

概要 using System.Text.RegularExpressions; public static class StringExtensions { private const RegexOptions OPTIONS = RegexOptions.IgnoreCase; public static string RemoveBBCode( this string self ) { self = Regex.Replace( self, @"\[b\](.*)…

【Unity】Unity 5.1 新機能「UnityEngine.Assertions.Must.MustExtensions」

Unity 5.1 で「UnityEngine.Assertions.Must.MustExtensions」が追加されました このクラスを使用することで値が正常であるかどうかを確認できます 値が不正の場合はメッセージを投げます 関数 説明 MustBeNull 値がnullであることを保証します MustNotBeNul…