コガネブログ

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

2023-06-01から1ヶ月間の記事一覧

【C#】float 型がほぼ整数なら true を返す拡張メソッド

C#

ソースコード public static bool IsApproximatelyInteger( this float value, float tolerance ) { return Mathf.Abs( Mathf.Round( value ) - value ) <= tolerance; }

【C#】List から複数の要素を Remove する拡張メソッド

C#

ソースコード public static void Remove<T>( this List<T> self, IEnumerable<T> collection ) { foreach ( var item in collection ) { self.Remove( item ); } }</t></t></t>

【C#】配列やリストから重複する要素を取得する拡張メソッド

C#

ソースコード public static T[] FindDuplicatedElements<T>( this IReadOnlyList<T> self ) { return self .GroupBy( x => x ) .Where( x => 2 <= x.Count() ) .Select( x => x.Key ) .ToArray() ; }</t></t>

【C#】小数点以下を取得する方法

C#

余りを使用する方法 var number = 3.14f; var decimalPart = number % 1; if (decimalPart != 0) { // 浮動小数点以下が存在する場合の処理 } 文字列変換を使用する方法 var number = 3.14f; var numberString = number.ToString(); if (numberString.Contai…

【C#】起動している Microsoft PowerPoint のプロセスを終了する方法

C#

ソースコード foreach ( var process in Process.GetProcessesByName( "POWERPNT" ) ) { process.Kill(); }

【Unity】エディタ拡張で Python を実行する例

ソースコード using System.Diagnostics; using UnityEditor; using Debug = UnityEngine.Debug; public class Example { [MenuItem( "hoge/hoge" )] private static void Hoge() { var startInfo = new ProcessStartInfo { FileName = @"python", UseShellE…

【Unity】int 型の数値を 3 つの要素を持つ配列にランダムに分解する例

概要 [MenuItem( "hoge/hoge" )] private static void Hoge() { var number = 9; // 分解したい数値 var array = new int[ 3 ]; var remaining = number; for ( var i = 0; i < array.Length - 1; i++ ) { var maxValue = remaining - ( array.Length - i - …

【C#】文字列を回転する関数

C#

概要 123 456 789 上記の値を持つ string を 147 258 369 このように変換する関数 private static string TransposeString( string input ) { var lines = input.Split( '\n' ); var rowCount = lines.Length; var columnCount = lines[ 0 ].Length; var mat…

【Unity】すべての SpriteRenderer を含む範囲を取得する方法

ソースコード using System.Linq; using UnityEngine; public sealed class Example : MonoBehaviour { private void Update() { var spriteRenderers = GetComponentsInChildren<SpriteRenderer>(); var left = spriteRenderers.Min( x => x.bounds.min.x ); var bottom = s</spriterenderer>…

【Unity】アルファブレンドした色を返す関数

ソースコード /// <summary> /// アルファブレンドした色を返します /// </summary> public static Color AlphaBlend ( in Color backgroundColor, in Color overlapColor, float alpha ) { return backgroundColor + ( overlapColor - backgroundColor ) * alpha; } 使用例 var…

【Unity】TextMesh Pro のワールド座標における端の位置を取得できる拡張メソッド

ソースコード using System.Linq; using TMPro; public static class TMP_TextExtensionMethods { public static float GetLocalEdgeLeft( this TMP_Text self ) { return self.transform.localPosition.x + self.textInfo.characterInfo.Min( x => x.bottom…

【Unity】TextMesh Pro のローカル座標における端の位置を取得できる拡張メソッド

ソースコード using System.Linq; using TMPro; public static class TMP_TextExtensionMethods { public static float GetLocalEdgeLeft( this TMP_Text self ) { return self.transform.localPosition.x + self.textInfo.characterInfo.Min( x => x.bottom…

【C#】SkipWhileLast の実装例

ソースコード using System; using System.Collections.Generic; public static class EnumerableExtensionMethods { public static IEnumerable<T> SkipWhileLast<T> ( this IEnumerable<T> self, Func<T, bool> predicate ) { var buffer = new List<T>(); var yieldStarted = f</t></t,></t></t></t>…

【Unity】RectTransform のサイズを TMP_Text などの大きさに合わせる MenuItem

ソースコード using UnityEditor; using UnityEngine; using UnityEngine.UI; namespace Kogane.Internal { internal static class SetPreferredSizeMenuItem { [MenuItem( "CONTEXT/RectTransform/Set Preferred Size" )] private static void SetPreferred…

【Unity】TextMesh Pro の文字のワールド座標を取得する拡張メソッド

ソースコード using TMPro; using UnityEngine; namespace Kogane { public static class TMP_TextExtensionMethods { public static Vector3 GetCharacterPosition ( this TMP_Text self, int index ) { var characterInfo = self.textInfo.characterInfo[ …