コガネブログ

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

【Unity】便利な関数や拡張メソッドを使用できる「unity-utils」紹介

はじめに

「unity-utils」を Unity プロジェクトに導入することで
便利な関数や拡張メソッドを使用できるようになります

使用例

RandomUtil

using Assets.Scripts.Utils;
using System.Collections.Generic;
using UnityEngine;

public class Example : MonoBehaviour
{
    private enum Direction { Left, Right, Up, Down }

    public class Card { }

    private void Awake()
    {
        // ランダムな bool 値を返す
        var randomBool = RandomUtil.NextBool();

        // 指定された要素からランダムに要素を返す
        var randomPerson = RandomUtil.Next( "me", "you" );

        // 配列からランダムに要素を返す
        var intArray = new[] { 1, 3, 5, 7, 9 };
        var randomInt = RandomUtil.NextItem( intArray );

        // リストからランダムに要素を返す
        var list = new List<int> { 1, 3, 5, 7, 9 };
        randomInt = RandomUtil.NextItem( list );

        // ランダムに列挙型の要素を返す
        var randomDirection = RandomUtil.NextEnum<Direction>();

        // 重みにもとづいて要素のインデックスをランダムに返す
        var weights = new int[] { 10, 10, 30, 50 };
        var randomIndex = RandomUtil.NextWeightedInd( weights );

        // 指定された個数ランダムに要素を返す
        var deckCards = new List<Card> { };
        var handCards = RandomUtil.Take( deckCards, 6 );

        // リストをシャッフルする
        list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        RandomUtil.Shuffle( list );

        // 配列をシャッフルする
        var array = new float[] { 1.1f, 1.2f, 1.3f, 1.5f, 1.6f };
        RandomUtil.Shuffle( array );

        // ランダムな1点を返す
        var point1 = new Vector2( 123f, 321f );
        var point2 = new Vector2( 0f, 0f );
        var randomPoint2 = RandomUtil.NextPointOnLine( point1, point2 );

        // ランダムな1点を返す
        var point3 = new Vector3( 123f, 321f, 213f );
        var point4 = new Vector3( 0f, 0f, 0f );
        var randomPoint3 = RandomUtil.NextPointOnLine( point3, point4 );

        // 0 から 100 までの確率で成功したかどうかを返す
        var percentage = 25;
        var isSuccess = RandomUtil.GetChance( percentage );

        // 0 .0から 1.0 までの確率で成功したかどうかを返す
        var probability = 0.25f;
        isSuccess = RandomUtil.GetChance( probability );
    }
}

RectTransform の拡張メソッド

using Assets.Scripts.Utils;
using UnityEngine;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var rectTransform = GetComponent<RectTransform>();

        // offsetMin や offsetMax を設定
        rectTransform.SetLeft( 0 );
        rectTransform.SetRight( 0 );
        rectTransform.SetTop( 0 );
        rectTransform.SetBottom( 0 );
        rectTransform.SetLeftTopRightBottom( 0, 0, 0, 0 );

        // anchoredPosition や sizeDelta を設定
        rectTransform.SetPosX( 0 );
        rectTransform.SetPosY( 0 );
        rectTransform.SetPosXY( 0, 0 );
        rectTransform.SetWidth( 0 );
        rectTransform.SetHeight( 0 );
        rectTransform.SetWidthHeight( 0, 0 );
        rectTransform.SetPosAndSize( 0, 0, 0, 0 );

        var pos = Vector3.zero;

        // 位置を取得
        pos = rectTransform.GetWorldCenter();
        pos = rectTransform.GetWorldTopLeft();
        pos = rectTransform.GetWorldTopRight();
        pos = rectTransform.GetWorldBottomLeft();
        pos = rectTransform.GetWorldBottomRight();
        pos = new Vector2( rectTransform.GetWorldLeft(), rectTransform.GetWorldTop() );
        pos = new Vector2( rectTransform.GetWorldRight(), rectTransform.GetWorldBottom() );
    }
}