private GameObject CreateMenuButton(string name, UnityEngine.Events.UnityAction callback, string iconPath, string label) { // clone & modify button if (!HomeSystem.instance.studyActor) { throw new Exception("HomeSystem.instance.studyActor is null"); } var studySkillButton = Common.GetChild(HomeSystem.instance.studyActor, "StudySkill,0"); if (!studySkillButton) { throw new Exception("Failed to get child 'StudySkill,0' from HomeSystem.instance.studyActor"); } var goMenuButton = UnityEngine.Object.Instantiate(studySkillButton, this.menu.transform); goMenuButton.SetActive(true); goMenuButton.name = name; goMenuButton.tag = "Untagged"; var button = goMenuButton.AddComponent <Button>(); button.onClick.AddListener(callback); goMenuButton.AddComponent <PointerClick>(); // modify button background var buttonBack = Common.GetChild(goMenuButton, "StudyEffectBack"); if (!buttonBack) { throw new Exception("Failed to get child 'StudyEffectBack' from 'StudySkill,0'"); } buttonBack.name = "MajordomoMenuButtonBack"; var image = buttonBack.GetComponent <Image>(); image.color = MajordomoWindow.MENU_BTN_BG_COLOR_UNSELECTED; var rectTransform = buttonBack.GetComponent <RectTransform>(); rectTransform.anchorMin = new Vector2(0, 0); rectTransform.anchorMax = new Vector2(1, 0); rectTransform.offsetMin = new Vector2(0, 0); rectTransform.offsetMax = new Vector2(0, 30); // modify button icon var buttonIcon = Common.GetChild(goMenuButton, "StudySkillIcon,0"); if (!buttonIcon) { throw new Exception("Failed to get child 'StudySkillIcon,0' from 'StudySkill,0'"); } buttonIcon.name = "MajordomoMenuButtonIcon"; rectTransform = buttonIcon.GetComponent <RectTransform>(); rectTransform.anchorMin = new Vector2(0, 1); rectTransform.anchorMax = new Vector2(1, 1); rectTransform.offsetMin = new Vector2(25, -80); rectTransform.offsetMax = new Vector2(-25, -20); var buttonIconImage = buttonIcon.GetComponent <Image>(); buttonIconImage.sprite = ResourceLoader.CreateSpriteFromImage(iconPath); if (!buttonIconImage.sprite) { throw new Exception($"Failed to create sprite: {iconPath}"); } // modify button text var buttonText = Common.GetChild(goMenuButton, "StudyEffectText"); if (!buttonText) { throw new Exception("Failed to get child 'StudyEffectText' from 'StudySkill,0'"); } buttonText.name = "MajordomoMenuButtonText"; rectTransform = buttonText.GetComponent <RectTransform>(); rectTransform.anchorMin = new Vector2(0, 0); rectTransform.anchorMax = new Vector2(1, 0); rectTransform.offsetMin = new Vector2(0, 0); rectTransform.offsetMax = new Vector2(0, 30); var text = buttonText.GetComponent <Text>(); if (!text) { throw new Exception("Failed to get Text component from 'StudyEffectText'"); } text.text = label; text.color = MajordomoWindow.MENU_BTN_COLOR_UNSELECTED; TaiwuCommon.SetFont(text); Common.RemoveComponent <SetFont>(buttonText); return(goMenuButton); }