部位类型选择按钮
为部位选择按钮添加UI_FacadeMenus_Tab脚本。
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对象。
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 : 刷新界面
}
当下层按钮调用上层窗口职业切换逻辑时,首先取消原来按钮的选中状态,保存新按钮,并进行实际的外观切换逻辑,整体与职业选择一致,刷新界面待之后完善。
测试效果。