部位类型选择按钮

为部位选择按钮添加UI_FacadeMenus_Tab脚本。

alt

public class UI_FacadeMenus_Tab : MonoBehaviour
{
    [SerializeField] Button button;// 按钮
    [SerializeField] Image iconImg; //Icon
    [SerializeField] Image tabFocus; //底框
    [SerializeField] AudioClip clickAudioClip;
    static UI_FacadeMenus_Tab()
    {
        colors = new Color[2];
        colors[0] = Color.white;
        colors[1] = new Color(0.964f, 0.882f, 0.611f);
    }
}

与上节类似,分别挂载UI对象。

alt

    public void Init(UI_CreateCharacterWindow window,CharacterParType CharacterParType)
    {

        this.window = window;
        this.CharacterParType = CharacterParType;
        button.onClick.AddListener(ButtonClick);
        UnSelect();
    }

    private void ButtonClick()
    {
        //告诉窗口,当前按钮代表的职业被玩家选择了
        AudioManager.Instance.PlayOnShot(clickAudioClip, Vector3.zero, 1, false);
        window.SelectFacedeMenusTab(this);
    }
    /// <summary>
    /// 选中
    /// </summary>
    public void Select()
    {
        iconImg.color = colors[1];
        tabFocus.enabled = true;

    }
    /// <summary>
    /// 取消选中
    /// </summary>
    public void UnSelect()
    {
        iconImg.color = colors[0];
        tabFocus.enabled =false;
    }

职业选择按钮初始化时添加按钮监听,默认没有选中。

    private void ButtonClick()
    {
        //告诉窗口,当前按钮代表的职业被玩家选择了
        AudioManager.Instance.PlayOnShot(clickAudioClip, Vector3.zero, 1, false);
        window.SelectFacedeMenusTab(this);
    }

按下按钮时,触发点击事件播放音效,并交由上层CreateCharacterWindow窗口进行外观切换的逻辑。

    //所有的部位类型按钮
    [SerializeField] private UI_FacadeMenus_Tab[] facadeMenu_Tabs;

    //当前选择的部位按钮
    private UI_FacadeMenus_Tab currentFacadeMenu_Tab;

    public override void Init()
    {
         modelTouchImage.OnDrag(ModelTouchImageDrag, 6);
      
         //初始化职业按钮
         professionButtons[0].Init(this, ProfessionType.Warrior);
         professionButtons[1].Init(this, ProfessionType.Assassin);
         professionButtons[2].Init(this, ProfessionType.Archer);
         professionButtons[3].Init(this, ProfessionType.Tank);

         //默认选择一个职业(战士)
         SelectProfession_Button(professionButtons[0]);

         //初始化外观菜单
         facadeMenu_Tabs[0].Init(this, CharacterParType.Face);
         facadeMenu_Tabs[1].Init(this, CharacterParType.Hair);
         facadeMenu_Tabs[2].Init(this, CharacterParType.Cloth);

         //默认选择一个外观(战士)
         SelectFacedeMenusTab(facadeMenu_Tabs[0]);
    }

上层窗口持有三种部位对应的按钮,并进行初始化。


    /// <summary>
    /// 选择外观菜单
    /// </summary>
    public void SelectFacedeMenusTab(UI_FacadeMenus_Tab newTab)
    {
        if (currentFacadeMenu_Tab != null)  currentFacadeMenu_Tab.UnSelect();
 
        newTab.Select();

        currentFacadeMenu_Tab = newTab;

        //TODO : 刷新界面
    }

当下层按钮调用上层窗口职业切换逻辑时,首先取消原来按钮的选中状态,保存新按钮,并进行实际的外观切换逻辑,整体与职业选择一致,刷新界面待之后完善。

alt

测试效果。