c# - Unity - 启动方法未运行
问题描述
我是 Unity 的新手,我正在学习一个飞扬的小鸟教程,以更加熟悉游戏引擎。我正在关注 CodeMonkey 教程。我在游戏结束屏幕。这是我附加到我的 GameOverWindow 的脚本。但只有 Awake() 被调用。开始没有。因此,我的活动无法正常工作,因此游戏结束窗口不会显示。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using CodeMonkey.Utils;
public class GameOverWindow : MonoBehaviour
{
private Text scoreText;
// Start is called before the first frame update
private void Start()
{
Bird.GetInstance().OnDied += Bird_OnDied;
}
private void Awake()
{
scoreText = transform.Find("scoreText").GetComponent<Text>();
transform.Find("retryBtn").GetComponent<Button_UI>().ClickFunc = () => { UnityEngine.SceneManagement.SceneManager.LoadScene("GameScene"); };
Hide();
}
private void Bird_OnDied(object sender, System.EventArgs e)
{
scoreText.text = Level.GetInstance().GetPipesPassedCount().ToString();
Show();
}
// Update is called once per frame
private void Update()
{
}
private void Hide()
{
gameObject.SetActive(false);
}
private void Show()
{
gameObject.SetActive(true);
}
}
解决方案
根据Unity 文档
Start 在脚本的生命周期中只被调用一次。但是,在初始化脚本对象时会调用 Awake,无论脚本是否启用。如果在初始化时未启用脚本,则可能不会在与 Awake 相同的帧上调用 Start。
因此,如果从一开始就禁用了 GameOverWindow,则不会执行 Start,但会执行 Awake。您可以将事件初始化移动到 Awake 并且它应该可以工作(只要添加事件是问题,而不是事件中的代码)。
推荐阅读
- php - 除了“str_repeat”之外,是否有任何手动方法来重复字符串?
- node.js - 猫鼬传递空字符串
- postgresql - 找不到方法“NpgsqlCommand.set_ExpectedTypes”
- ios - Apple 联系人使用政策
- cassandra - 如何在 TestCassandra 中获取 Cassandra 会话的实例
- java - 如何将单个 json 对象值解析为按钮
- erlang - 如何不实现行为回调函数?
- java - 无法读取 JSON:无法识别的字符转义“”
- datetime - Julia 将 Dates 包中的秒数转换为整数:没有方法匹配 Int64(::Second)
- javascript - 尝试使用 Select2 AJAX 显示列表数据菜单时出现错误(无法读取未定义的属性“toUpperCase”)