0
respostas

Aplicando Mask na UI Image - Unity

Estou tentando aplicar uma máscara em um minimapa como um mod para o meu jogo porém não está funcionando corretamente. Poderiam me ajudar?

Minimapa original do jogo

Minimapa após o mod

using BepInEx;
using UnityEngine;
using BepInEx.Configuration;
using Jotunn.Utils;
using UnityEngine.UI;

namespace RotateMinimapMod
{
    [BepInPlugin(PluginGUID, PluginName, PluginVersion)]
    [BepInDependency(Jotunn.Main.ModGuid)]
    //[NetworkCompatibility(CompatibilityLevel.EveryoneMustHaveMod, VersionStrictness.Minor)]
    internal class RotateMinimapMod : BaseUnityPlugin
    {
        public const string PluginGUID = "com.source-guilherme.rotateminimapmod";
        public const string PluginName = "RotateMinimapMod";
        public const string PluginVersion = "0.0.1";

        public GameObject minimapMaskContainerPrefab;

        private void Awake()
        {
            AssetBundle assetBundle = AssetUtils.LoadAssetBundleFromResources("rotate_minimap", typeof(RotateMinimapMod).Assembly);
            try
            {
                minimapMaskContainerPrefab = assetBundle.LoadAsset<GameObject>("MinimapMask");
            }
            finally
            {
                assetBundle.Unload(false);
            }

            On.Minimap.Awake += Minimap_Awake;
            //On.Minimap.CenterMap += Minimap_CenterMap;
            //On.Minimap.UpdatePlayerMarker += Minimap_UpdatePlayerMarker;

            Jotunn.Logger.LogInfo("RotateMinimapMod has loaded!");
        }

        private void Minimap_UpdatePlayerMarker(On.Minimap.orig_UpdatePlayerMarker orig, Minimap self, Player player, Quaternion playerRot)
        {
            if (self.m_mode == Minimap.MapMode.Small)
            {
                self.m_smallMarker.rotation = Quaternion.Euler(0, 0, 0);
                Ship controlledShip = player.GetControlledShip();
                if ((bool)controlledShip)
                {
                    self.m_smallShipMarker.gameObject.SetActive(value: true);
                    float yawShip = controlledShip.GetShipYawAngle();
                    self.m_smallShipMarker.transform.rotation = Quaternion.Euler(0, 0, yawShip);
                }
                else
                {
                    self.m_smallShipMarker.gameObject.SetActive(value: false);
                }
            } else
            {
                orig(self, player, playerRot);
            }
        }

        private void Minimap_Awake(On.Minimap.orig_Awake orig, Minimap self)
        {
            GameObject maskContainer = Instantiate(minimapMaskContainerPrefab, self.m_smallRoot.transform);
            Transform container = maskContainer.transform;

            self.m_mapImageSmall.transform.SetParent(container);
            self.m_smallShipMarker.transform.SetParent(container);
            self.m_smallMarker.transform.SetParent(container);
            self.m_windMarker.transform.SetParent(container);
        }

        private void Minimap_CenterMap(On.Minimap.orig_CenterMap orig, Minimap self, Vector3 centerPoint)
        {
            self.m_mapImageSmall.transform.rotation = Quaternion.Euler(0, 0, Player.m_localPlayer.m_eye.transform.rotation.eulerAngles.y);
            for (int i = 0; i < self.m_pinRootSmall.childCount; i++)
            {
                self.m_pinRootSmall.transform.GetChild(i).transform.rotation = Quaternion.identity;
            }
            orig(self, centerPoint);
        }
    }
}