关闭

Unity 监听第一次进入播放状态的事件

标签: unity编辑器
427人阅读 评论(0) 收藏 举报
分类:

原因

由于 Unity 场景没有挂载脚本,当要在编辑器下也可以直接运行游戏时,需要给场景动态挂载脚本,那么就需要知道 Unity 第一次进入播放状态的事件。

编辑器提供了EditorApplication.playmodeStateChanged委托事件,会在播放状态改变的时候进行回调,但是这个事件不止会回调一次,播放、暂停、结束等都会调用这个事件,而且第一次调用时,也不是真正进入播放状态的时机。

详细的调用日志,可参考文章 http://masa795.hatenablog.jp/entry/2013/04/10/100017

当按下Play按钮的时候,会先调用EditorApplication.playmodeStateChanged进行通知播放模式要改变了,此时只有EditorApplication.isPlayingOrWillChangePlaymode变量为True,接着会重新类的构造,此时除了EditorApplication.isPlayingOrWillChangePlaymode,其他变量也都还是False,在接下去的EditorApplication.playmodeStateChanged的时候,EditorApplication.isPlaying变量才为True。

准备

这里写图片描述

方法

那么判断第一次真正游戏播放的事件,就需要结合EditorApplication.isPlayingOrWillChangePlaymode变量和EditorApplication.isPlaying变量,具体代码如下:

using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;

[InitializeOnLoad]
public class GameLauncher
{
    static bool firstPlay = false;

    static GameLauncher()
    {
        EditorApplication.playmodeStateChanged += ChangedPlaymodeState;
    }

    /// <summary>
    /// 会重复进入多次
    /// </summary>
    static void ChangedPlaymodeState()
    {
        if (EditorApplication.isPaused)
        {
            return;
        }
        if (!(EditorApplication.isPlaying && EditorApplication.isPlayingOrWillChangePlaymode))
        {
            return;
        }
        if (firstPlay)
        {
            return;
        }
        firstPlay = true;

        Scene scene = SceneManager.GetActiveScene();
        if (!scene.path.StartsWith("Assets/Scenes/"))
        {
            return;
        }

        // ...... 动态挂载脚本
    }
}
0
0

猜你在找
【直播】机器学习&深度学习系统实战(唐宇迪)
【直播】Kaggle 神器:XGBoost 从基础到实战(冒教授)
【直播回放】深度学习基础与TensorFlow实践(王琛)
【直播】计算机视觉原理及实战(屈教授)
【直播】机器学习之凸优化(马博士)
【直播】机器学习之矩阵(黄博士)
【直播】机器学习之概率与统计推断(冒教授)
【直播】机器学习之数学基础
【直播】TensorFlow实战进阶(智亮)
【直播】深度学习30天系统实训(唐宇迪)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3283791次
    • 积分:33836
    • 等级:
    • 排名:第134名
    • 原创:394篇
    • 转载:88篇
    • 译文:5篇
    • 评论:3371条
    个人说明
    联系方式:
    最新评论