学习日记#03

学习日记#03


Unity

BasePanel

public virtual void OnEnter() {
	
}
public virtual void OnResume() {
	
}
public virtual void On

UIManager

// 存储实例化后的界面
private Dictionary<UIPanelType, BasePanel> _panelDic = new Dictionary<UIPanelType, BasePanel>();

// 
private Transform canvasTrans;
public Transform CanvasTrans
{
	get
	{
		if (null == canvasTrans) 
		{
			canvasTrans = GameObject.Instantiate(Resources.Load<GameOjbect>());
		}
	}
}

// 实例化界面
public void GetPanel(UIPanelType uIPanelType)
{
	BasePanel panel;
	panelDic.TryGetValue(uIPanelType, out panel);
	if (null == panel)
	{
		// 界面未被实例化
		string path;
		panelPathDic.TryGetValue(uIPanelType, out path);
		if (null == path)
		{
			throw $"路径错误,{uIPanelType} 路径找不到";
		}
		else 
		{
			GameObject instancePanel = GameObject.Instantiate(Resources.Load<GameObject>(path));
			instancePanel.transform.SetParent(CanvasTrans, false);
			AddScriptComponent(uIpanelType, panel); 
			panelDic.Add(uIpanelType, GetAndAddComponent<BasePanel>(instancePanel));
		}
	}
	else // 界面已实例化
	{
		
	}
}
// 反射用于动态添加脚本非常好用,可以使用字符串,这样就只需要脚本有命名规范
public void AddScriptComponent(UIPanelType uIPanelType, GameObject go)
{
	string str =System.Enum.GetName(uIPanelType.GetType(), uIPanelType);
	string scriptName = str + "Panel";
	
	Type scriptType = Type.GetType(scriptName);
	if (!go.GetComponent(scriptType))
	{
		go.AddComponent(scriptType);
	}
}
// 检查BasePanel 用于dictionary
public T GetAndAddComponent<T>(GameObject go) where T : Component
{
	if(!go.GetComponent<T>()) 
	{
		go.AddComponent<T>();
	}
	return go.GetComponent<T>();
}

MainmenuPanel

private Button taskBtn;
private Button shopBtn;
private Button skillBtn;
private Button systemBtn;
private Button bagBtn;

void Start() 
{
	// 初始化... Find("path");

	// 添加监听 .onClick.AddListener(delegate(){OnClickBtn(UIPanelType uIPanelType)});
	
}

private void OnClickBtn(UIPanelType uIPanelType)
{
	UIManager.Instance.GetPanel(uIPanelType);
}

UI状态解析

栈管理事件触发层级,通过PushPanel方法得到Panel,将GetPanel私有

private Stack<BasePanle> panleStack = new();

public void PushPanel(UIPanelType uIPanelType)
{
	if(panelStack.Count > 0{
		BasePanel topPanel = panelStack.Peek();
		topPanel.OnPause();
	}
	BasePanel basePanel = GetPanel(uIPanelType);
	panel.OnEnter();
	panelStack.Push(basePanel);
}

public void PopPanel()
{
	if (panelSatck.Count <= 0)
	{
		return;
	}
	BasePanel topPanel = panelStack.Pop();
	topPanel.OnExit();
	if (panelStack.Count <= 0)
	{
		return;
	}
	BasePanel newPanel = panelStack.Peek();
	newPanel.OnResume();
}

MainmenuPanel

public override void OnEnter()
{
	
}
public override void OnPause()
{
	
}
public override void OnResume()
{

}
public override void OnExie()
{

}
public class BasePanel :
{
	protected CanvasGroup canvasGroup;
	protected Transform closeTrans;
	protected Button closeBtn;
	
	public void Awake()
	{
		
	}
	public OnEnter()
	{
		canvasGruop
	}
}

public override void OnEnter()
{
	base.OnEnter();
	Vector3 tempPos = transform.localPosition;
	tempPos.x = 3000;
	transform.localPosion = tempPos;
	transform.DOLocalMoveX(0, 1.0f).OnComplete(()=>{
		
	});
}

Canvas Group

Alpha : 透明度
Interactable :可交互性
Blocks Raycasts : 射线检测
Ignore Parent Group:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值