Merge branch 'main' of https://git.personalnas.com/Misaki/Unity20GameJam
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using UnityEngine;
|
||||
using A2W;
|
||||
using Cysharp.Threading.Tasks;
|
||||
|
||||
public class LaunchManager : SceneSingleton<LaunchManager>
|
||||
{
|
||||
@@ -8,5 +9,17 @@ public class LaunchManager : SceneSingleton<LaunchManager>
|
||||
UIManager.instance?.Init();
|
||||
|
||||
await UIManager.instance.ShowPanel<LaunchPanel>();
|
||||
|
||||
//await UniTask.Delay(2000);
|
||||
|
||||
//var panel = await UIManager.instance.ShowPanel<MessagePanel>();
|
||||
|
||||
//await UniTask.Delay(2000);
|
||||
|
||||
//panel.AddMessage("Test Message Forever");
|
||||
|
||||
//await UniTask.Delay(2000);
|
||||
|
||||
//panel.AddMessage("Test Message 2s", 2);
|
||||
}
|
||||
}
|
||||
|
||||
8
Assets/Gameplay/Scripts/UI/Element.meta
Normal file
8
Assets/Gameplay/Scripts/UI/Element.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5fd248778c5af0f4ea63115e6bcc3ab5
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
86
Assets/Gameplay/Scripts/UI/Element/MessageElement.cs
Normal file
86
Assets/Gameplay/Scripts/UI/Element/MessageElement.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using UnityEngine;
|
||||
using MonsterLove.StateMachine;
|
||||
using DG.Tweening;
|
||||
|
||||
public enum MessageStates
|
||||
{
|
||||
Init,
|
||||
Add,
|
||||
Show,
|
||||
Del
|
||||
}
|
||||
|
||||
public class MessageElement : MonoBehaviour
|
||||
{
|
||||
[SerializeField] TMPro.TextMeshProUGUI messageText;
|
||||
|
||||
public RectTransform RectTransform
|
||||
{
|
||||
get
|
||||
{
|
||||
return transform as RectTransform;
|
||||
}
|
||||
}
|
||||
|
||||
public string Message { get; private set; }
|
||||
|
||||
private float remaining;
|
||||
|
||||
private MessagePanel panel;
|
||||
|
||||
StateMachine<MessageStates> fsm;
|
||||
|
||||
public void Init(MessagePanel panel, string message, float duration)
|
||||
{
|
||||
this.panel = panel;
|
||||
|
||||
Message = message;
|
||||
remaining = duration;
|
||||
|
||||
if (remaining < 0)
|
||||
{
|
||||
remaining = float.MaxValue;
|
||||
}
|
||||
|
||||
if (fsm is null)
|
||||
{
|
||||
fsm = StateMachine<MessageStates>.Initialize(this);
|
||||
}
|
||||
fsm.ChangeState(MessageStates.Init);
|
||||
}
|
||||
|
||||
private void Init_Enter()
|
||||
{
|
||||
// 这里初始化,包括位置和消息信息
|
||||
messageText.text = Message;
|
||||
messageText.rectTransform.anchoredPosition = new Vector2(messageText.rectTransform.rect.width, 0);
|
||||
|
||||
fsm.ChangeState(MessageStates.Add);
|
||||
}
|
||||
|
||||
private void Add_Enter()
|
||||
{
|
||||
// 这里播动画
|
||||
messageText.rectTransform.DOAnchorPosX(0, 0.2f);
|
||||
|
||||
fsm.ChangeState(MessageStates.Show);
|
||||
}
|
||||
|
||||
private void Show_Update()
|
||||
{
|
||||
remaining -= Time.deltaTime;
|
||||
if (remaining <= 0)
|
||||
{
|
||||
remaining = float.MaxValue;
|
||||
fsm.ChangeState(MessageStates.Del);
|
||||
}
|
||||
}
|
||||
|
||||
private void Del_Enter()
|
||||
{
|
||||
// 理论上这里也需要做个动画,先不管了
|
||||
|
||||
panel.DelMessage(this);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6a0067f01fbaadf478392b05bee47a0d
|
||||
79
Assets/Gameplay/Scripts/UI/MessagePanel.cs
Normal file
79
Assets/Gameplay/Scripts/UI/MessagePanel.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using UnityEngine;
|
||||
using A2W;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
using DG.Tweening;
|
||||
|
||||
public class MessagePanel : UIPanel
|
||||
{
|
||||
[SerializeField] MessageElement messageElementPrefab;
|
||||
[SerializeField] RectTransform content;
|
||||
|
||||
List<MessageElement> messages;
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
messages = new List<MessageElement>();
|
||||
}
|
||||
|
||||
public override async UniTask Show()
|
||||
{
|
||||
await UniTask.Yield();
|
||||
|
||||
gameObject.SetActive(true);
|
||||
}
|
||||
public override async UniTask Hide()
|
||||
{
|
||||
await UniTask.Yield();
|
||||
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public void AddMessage(string message, float duration = -1)
|
||||
{
|
||||
// 默认加到开头
|
||||
AddMessage(message, duration, 0);
|
||||
}
|
||||
|
||||
public void AddMessage(string message, float duration, int index)
|
||||
{
|
||||
var msgEle = Instantiate<MessageElement>(messageElementPrefab, content, false);
|
||||
msgEle.Init(this, message, duration);
|
||||
//messages.Add(msgEle);
|
||||
messages.Insert(index, msgEle);
|
||||
|
||||
|
||||
UpdateMessagesPosY();
|
||||
}
|
||||
|
||||
public void DelMessage(string message)
|
||||
{
|
||||
foreach (var msg in messages)
|
||||
{
|
||||
if (msg.Message == message)
|
||||
{
|
||||
DelMessage(msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async void DelMessage(MessageElement msgEle)
|
||||
{
|
||||
messages.Remove(msgEle);
|
||||
Destroy(msgEle.gameObject);
|
||||
|
||||
await UniTask.Yield();
|
||||
|
||||
UpdateMessagesPosY();
|
||||
}
|
||||
|
||||
public void UpdateMessagesPosY()
|
||||
{
|
||||
// 根据messageElement的index使用Dotween移动PosY到指定位置(-index * Height
|
||||
for (int i = 0; i < messages.Count; i++)
|
||||
{
|
||||
messages[i].RectTransform.DOAnchorPosY(-i * messages[i].RectTransform.rect.height, 0.2f);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Gameplay/Scripts/UI/MessagePanel.cs.meta
Normal file
2
Assets/Gameplay/Scripts/UI/MessagePanel.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d9d93c1e7bfbced4cb3128c5c42890b8
|
||||
Reference in New Issue
Block a user