Roman bb94ad63ff 1.我添加了fungus包,用来做对话
2.我已经完成了水缸和镜子的交互对话
3.已经找到了该包的输入代码和退出代码,可以自定义厉害的对话了
2021-07-05 22:45:35 +08:00

103 lines
3.0 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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
}
}