コガネブログ

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

【Unity】uGUI で六角形のタイル状に UI を整列できる「HexGridLayout.cs」紹介

ソースコード

使用例

f:id:baba_s:20180530204115p:plain

Canvas 内に「HexGridLayout」をアタッチしたオブジェクトを用意して、
整列させたいオブジェクトをその子供にすることで

f:id:baba_s:20180530204017g:plain

このように六角形のタイル状に UI を整列できます

備考

Assets/Hexagon.cs(38,63): error CS0122: 
`UnityEngine.UI.SetPropertyUtility' is inaccessible due to its protection level

もし上記のようなコンパイルエラーが発生する場合は

using UnityEngine.Events;

namespace UnityEngine.UI
{
    internal static class SetPropertyUtility
    {
        public static bool SetColor(ref Color currentValue, Color newValue)
        {
            if (currentValue.r == newValue.r && currentValue.g == newValue.g && currentValue.b == newValue.b && currentValue.a == newValue.a)
                return false;

            currentValue = newValue;
            return true;
        }

        public static bool SetStruct<T>(ref T currentValue, T newValue) where T : struct
        {
            if (currentValue.Equals(newValue))
                return false;

            currentValue = newValue;
            return true;
        }

        public static bool SetClass<T>(ref T currentValue, T newValue) where T : class
        {
            if ((currentValue == null && newValue == null) || (currentValue != null && currentValue.Equals(newValue)))
                return false;

            currentValue = newValue;
            return true;
        }
    }
}

上記の SetPropertyUtility.cs も Unity プロジェクトに追加します