
1.导入URP
2.配置了URP
3.导入Dotween
4.导入Odin
5.导入了InputSystem
6.设置项目为新旧输入系统并用
7.导入了FunGus
8.创建了一些空文件夹
我是每日提醒上班小助手,今天你上班了吗?😺
103 lines
3.0 KiB
C#
103 lines
3.0 KiB
C#
// This code is part of the Fungus library (https://github.com/snozbot/fungus)
|
||
// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE)
|
||
|
||
using UnityEngine;
|
||
using System.Collections;
|
||
|
||
namespace Fungus
|
||
{
|
||
/// <summary>
|
||
/// The block will execute when the user clicks or taps on the clickable object.
|
||
/// </summary>
|
||
[EventHandlerInfo("Sprite",
|
||
"Object Clicked",
|
||
"The block will execute when the user clicks or taps on the clickable object.")]
|
||
[AddComponentMenu("")]
|
||
public class ObjectClicked : EventHandler
|
||
{
|
||
public class ObjectClickedEvent
|
||
{
|
||
public Clickable2D ClickableObject;
|
||
public ObjectClickedEvent(Clickable2D clickableObject)
|
||
{
|
||
ClickableObject = clickableObject;
|
||
}
|
||
}
|
||
|
||
[Tooltip("Object that the user can click or tap on")]
|
||
[SerializeField] protected Clickable2D clickableObject;
|
||
|
||
[Tooltip("Wait for a number of frames before executing the block.")]
|
||
[SerializeField] protected int waitFrames = 1;
|
||
|
||
protected EventDispatcher eventDispatcher;
|
||
|
||
protected virtual void OnEnable()
|
||
{
|
||
eventDispatcher = FungusManager.Instance.EventDispatcher;
|
||
|
||
eventDispatcher.AddListener<ObjectClickedEvent>(OnObjectClickedEvent);
|
||
}
|
||
|
||
protected virtual void OnDisable()
|
||
{
|
||
eventDispatcher.RemoveListener<ObjectClickedEvent>(OnObjectClickedEvent);
|
||
|
||
eventDispatcher = null;
|
||
}
|
||
|
||
void OnObjectClickedEvent(ObjectClickedEvent evt)
|
||
{
|
||
OnObjectClicked(evt.ClickableObject);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Executing a block on the same frame that the object is clicked can cause
|
||
/// input problems (e.g. auto completing Say Dialog text). A single frame delay
|
||
/// fixes the problem.
|
||
/// </summary>
|
||
protected virtual IEnumerator DoExecuteBlock(int numFrames)
|
||
{
|
||
if (numFrames == 0)
|
||
{
|
||
ExecuteBlock();
|
||
yield break;
|
||
}
|
||
|
||
int count = Mathf.Max(waitFrames, 1);
|
||
while (count > 0)
|
||
{
|
||
count--;
|
||
yield return new WaitForEndOfFrame();
|
||
}
|
||
|
||
ExecuteBlock();
|
||
}
|
||
|
||
#region Public members
|
||
|
||
/// <summary>
|
||
/// Called by the Clickable2D object when it is clicked.
|
||
/// </summary>
|
||
public virtual void OnObjectClicked(Clickable2D clickableObject)
|
||
{
|
||
if (clickableObject == this.clickableObject)
|
||
{
|
||
StartCoroutine(DoExecuteBlock(waitFrames));
|
||
}
|
||
}
|
||
|
||
public override string GetSummary()
|
||
{
|
||
if (clickableObject != null)
|
||
{
|
||
return clickableObject.name;
|
||
}
|
||
|
||
return "None";
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
}
|