修改playmaker中原先的UiDropDownAddOptions代码,这个原来只支持创建老版的dropdown这个component,现在用下面的代码覆盖原来的能创建新版的Dropdown-TextMeshPro这个component。并且能够配合其他操作,实现上一个下拉框选择后到这个下拉框的一种二级选择方式。清除原来的下拉框内容,更新新的下拉框选择。
#if UNITY_5_3 || UNITY_5_3_OR_NEWER
using UnityEngine;
using System.Collections.Generic;
using TMPro;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.UI)]
[Tooltip(“Add multiple options to the options of the Dropdown UI Component”)]
public class UiDropDownAddOptions : ComponentAction<TMP_Dropdown>
{
[RequiredField]
//[CheckForComponent(typeof(UnityEngine.UI.Dropdown))]
[CheckForComponent(typeof(TMPro.TMP_Dropdown))]
[Tooltip(“The GameObject with the UI DropDown component.”)]
public FsmOwnerDefault gameObject;
[CompoundArray("Options", "Text", "Image")]
[Tooltip("The text to use for this option.")]
public FsmString[] optionText;
[ObjectType(typeof(Sprite))]
[Tooltip("The image to use for this option.")]
public FsmObject[] optionImage;
// private UnityEngine.UI.Dropdown dropDown;
//private List<UnityEngine.UI.Dropdown.OptionData> options;
private TMP_Dropdown dropDown;
private List<TMP_Dropdown.OptionData> options;
public override void Reset()
{
gameObject = null;
optionText = new FsmString[1];
optionImage = new FsmObject[1];
}
public override void OnEnter()
{
var go = Fsm.GetOwnerDefaultTarget(gameObject);
if (UpdateCache(go))
{
dropDown = cachedComponent;
}
InitDropdown();
DoAddOptions();
Finish();
}
private void DoAddOptions()
{
if (dropDown == null) return;
options = new List<TMP_Dropdown.OptionData>();
for (var i = 0; i < optionText.Length; i++)
{
var text = optionText[i];
options.Add(
new TMP_Dropdown.OptionData
{
text = text.Value,
image = optionImage[i].RawValue as Sprite
}
);
}
dropDown.AddOptions(options);
}
private void InitDropdown()
{
//清空默认节点
dropDown.options.Clear();
}
}
}
#endif
演示