创建从另一个脚本启动协同程序的事件
本文关键字:程序 事件 启动 另一个 脚本 创建 | 更新日期: 2023-09-27 18:03:24
我正在制作一个事件,当它触发时,它会执行failLevel的内容。为此,我制作了一个委托
public delegate Coroutine FailGame(IEnumerator function);
public static event FailGame gameFailedEvent;
像这样,我为它订阅了适当的功能
void Start ()
{
gameFailedEvent += StartCoroutine;
}
当它从相同的脚本调用时,它就会工作,如下所示:
gameFailedEvent(WaitThenFailLevel());
当这个WaitThenFailLevel((看起来像这样时:
IEnumerator WaitThenFailLevel()
{
CharacterController2D.playerDied = true;
if (CharacterController2D.animState != CharacterController2D.CharAnimStates.fall)
{
CharacterController2D.currentImageIndex = 0;
CharacterController2D.animState = CharacterController2D.CharAnimStates.fall;
}
CharacterController2D.movementDisabled = true;
yield return new WaitForSeconds(0.2f);
StartCoroutine(ScaleTime(1.0f, 0.0f, 1.2f));
}
这里很好用。现在,我有了另一个可以杀死玩家的对象(我知道有危险的时候(,我不想再复制粘贴所有东西,我只想让它触发上面脚本中的静态事件。
我确实试过让WaitThenFailGame功能
public static
并使我的所有其他Enumerator都是静态的,但我得到了一个名为"非静态字段需要对象引用…"的错误因此,我尝试了活动的东西。一切都很好,但我不能从另一个脚本中调用事件,因为我不能将上面提到的脚本中的函数传递给它。现在该怎么办?
下面是示例代码:
EventContainor.cs
public class EventContainer : MonoBehaviour
{
public static event Action<string> OnGameFailedEvent;
void Update()
{
if (Input.GetKey(KeyCode.R))
{
// fire the game failed event when user press R.
if(OnGameFailedEvent = null)
OnGameFailedEvent("some value");
}
}
}
Listener.cs
public class Listener : MonoBehaviour
{
void Awake()
{
EventContainer.OnGameFailedEvent += EventContainer_OnGameFailedEvent;
}
void EventContainer_OnGameFailedEvent (string value)
{
StartCoroutine(MyCoroutine(value));
}
IEnumerator MyCoroutine(string someParam)
{
yield return new WaitForSeconds(5);
Debug.Log(someParam);
}
}
using UnityEngine;
public class ScriptA : MonoBehaviour
{
public ScriptB anyName;
void Update()
{
anyName.DoSomething();
}
}
using UnityEngine;
public class ScriptB : MonoBehaviour
{
public void DoSomething()
{
Debug.Log("Hi there");
}
}
这是脚本之间的链接函数,从这里复制,也许协程是一样的,然后你需要在void Start() {}
中启动协程,你可能会发现这也很有用。