Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Unity游戏管理器。脚本只工作一次

Unity游戏管理器。脚本只工作一次
EN

Stack Overflow用户
提问于 2016-03-09 11:55:33
回答 2查看 68.8K关注 0票数 60

我在做一个简单的游戏管理器。我有一个脚本,这将从游戏中的所有场景可访问。在加载新场景后,我需要检查它的变量的值。但我的代码在开始模拟后只运行一次,而所有场景中都存在使用此脚本的对象。怎么啦?为什么它在加载新场景后不起作用?

EN

回答 2

Stack Overflow用户

发布于 2018-08-29 13:57:20

这是如何开始你喜欢的任何场景,并确保重新整合你的_preload场景,每次你点击播放按钮在unity编辑器中。从Unity 2017 RuntimeInitializeOnLoadMethod开始有新的属性可用,关于它的更多信息here

基本上,您有一个简单的plane c#类和一个带有RuntimeInitializeOnLoadMethod的静态方法。现在,每次你开始游戏时,这个方法都会为你加载预加载的场景。

代码语言:javascript
运行
AI代码解释
复制
using UnityEngine;
using UnityEngine.SceneManagement;

public class LoadingSceneIntegration {

#if UNITY_EDITOR 
    public static int otherScene = -2;

    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    static void InitLoadingScene()
    {
        Debug.Log("InitLoadingScene()");
        int sceneIndex = SceneManager.GetActiveScene().buildIndex;
        if (sceneIndex == 0) return;

        Debug.Log("Loading _preload scene");
        otherScene = sceneIndex;
        //make sure your _preload scene is the first in scene build list
        SceneManager.LoadScene(0); 
    }
#endif
}

然后,在_preload场景中有另一个脚本,该脚本将加载回所需的场景(从开始的位置):

代码语言:javascript
运行
AI代码解释
复制
...
#if UNITY_EDITOR 
    private void Awake()
    {

        if (LoadingSceneIntegration.otherScene > 0)
        {
            Debug.Log("Returning again to the scene: " + LoadingSceneIntegration.otherScene);
            SceneManager.LoadScene(LoadingSceneIntegration.otherScene);
        }
    }
#endif
...
票数 10
EN

Stack Overflow用户

发布于 2020-05-14 04:38:19

从2019年5月起不使用_preload的替代解决方案

https://low-scope.com/unity-tips-1-dont-use-your-first-scene-for-global-script-initialization/

我从上面的博客中改写成了下面的操作指南:

为所有场景加载静态资源预置

Project > Assets中,创建一个名为Resources的文件夹。

从一个空的GameObject创建一个Main预置并放置在Resources文件夹中。

Assets > Scripts中或任何位置创建一个Main.cs C#脚本。

代码语言:javascript
运行
AI代码解释
复制
using UnityEngine;

public class Main : MonoBehaviour
{
    // Runs before a scene gets loaded
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    public static void LoadMain()
    {
        GameObject main = GameObject.Instantiate(Resources.Load("Main")) as GameObject;
        GameObject.DontDestroyOnLoad(main);
    }
    // You can choose to add any "Service" component to the Main prefab.
    // Examples are: Input, Saving, Sound, Config, Asset Bundles, Advertisements
}

Main.cs添加到Resources文件夹中的Main预置中。

请注意它是如何使用RuntimeInitializeOnLoadMethod以及Resources.Load("Main")DontDestroyOnLoad的。

将需要跨场景全局的任何其他脚本附加到此预置。

请注意,如果将其他场景游戏对象链接到这些脚本,则可能需要在这些脚本的Start函数中使用类似以下内容:

代码语言:javascript
运行
AI代码解释
复制
if(score == null)
    score = FindObjectOfType<Score>();
if(playerDamage == null)
    playerDamage = GameObject.Find("Player").GetComponent<HitDamage>();

或者更好的是,使用资产管理系统,如Addressable AssetsAsset Bundles

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35890932

复制
相关文章
LeetCode - Nim游戏 & 只出现一次的数字
原题地址:https://leetcode-cn.com/problems/nim-game/ & https://leetcode-cn.com/problems/single-number/
晓痴
2019/10/12
3940
【Unity3D】Unity 脚本 ④ ( 游戏物体 GameObject 的坐标 | 修改 游戏物体 GameObject 的本地坐标 )
在 C# 脚本中 , 调用 this.transform.localPosition 代码 , 获取的 本地坐标 类型是 Vector3 类型 , 这是一个 三维向量 , 由 3 个 float 浮点型的数值组成 ;
韩曙亮
2023/03/30
1.8K0
【Unity3D】Unity 脚本 ④ ( 游戏物体 GameObject 的坐标 | 修改 游戏物体 GameObject 的本地坐标 )
Unity 脚本入门
在 Unity 中脚本是必不可少的组成部分,因为它将定义游戏的各种行为。Unity 推荐使用的编程语言是 JavaScript,但是 C# 或 Boo 同样也可以。下面介绍 JavaScript 的基本使用及脚本的 API 。
hrscy
2018/08/30
1.5K0
Unity 脚本入门
unity常用的800个脚本_unity怎么挂载脚本
使用 Flow 类型的指令十分类似于使用英语口语,基本上这些指令的单词只要看到就能猜到它的作用,尤其是学过编程的朋友对其中的某些单词一定很熟悉。
全栈程序员站长
2022/11/17
1.5K0
unity常用的800个脚本_unity怎么挂载脚本
unity2d3d结合_unity3d脚本编程与游戏开发
3、依次选择Data –> Resources –> ScriptTemplates
全栈程序员站长
2022/10/02
1.6K0
unity2d3d结合_unity3d脚本编程与游戏开发
【Unity3D】Unity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 )
在 Project 窗口中的 Assets 目录下 , 创建 Scripts 目录用于存放 C# 脚本 ;
韩曙亮
2023/03/30
4.4K0
【Unity3D】Unity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 )
Unity学习笔记-脚本
1.在桌面找到unity图标,右键属性打开 2.点击打开文件所在位置 3.在Editor文件夹下,依次进入Editor->Data->Resources->ScriptTemplates中 4.修改"81-C# Script-NewBehaviourScript.cs.txt"文件的权限,使它可修改 5.用vs打开"81-C# Script-NewBehaviourScript.cs.txt"文件(用文本打开也行,但可能出现编码问题) 6.把它修改为自己需要的样子保存即可
六月丶
2022/12/26
7180
Unity学习笔记-脚本
【Unity游戏开发】初探Unity动画优化
  在最近的优化工作中,马三发现项目中的动画文件内存占比实在是太大了,峰值竟然有200多mb,很明显需要进行优化。经过一番网上查阅资料并结合自己实际操作以后,得到一些需心得体会,在这里马三记录一下并且分享给大家,希望对大家能有一些帮助。
马三小伙儿
2021/06/10
3.3K0
【Unity游戏开发】初探Unity动画优化
Unity脚本基础练习
现有四个capsule,分别附有一个脚本HP,里面只写有一个公开的变量hp,并赋有不同的值,其中从左往右第二个赋的hp最小。 现需通过脚本把这个capsule找出并变为红色。
六月丶
2022/12/26
4280
Unity脚本基础练习
【Unity 3D 游戏开发】Unity3D 入门 - 工作区域介绍 与 入门示例
scence视图简介 : 展示创建的游戏对象, 可以对所有的游戏对象进行 移动, 操作 和 放置;
韩曙亮
2023/03/27
2.3K0
【Unity 3D 游戏开发】Unity3D 入门 - 工作区域介绍 与 入门示例
【Unity游戏开发】浅谈Unity游戏开发中的单元测试
  单元测试定义:单元测试在传统软件开发中是非常重要的工具,它是指对软件中的最小可测试单元进行检查和验证,一般情况下就是对代码中的一个函数去进行验证,检查它的正确性。一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。单元测试使用单元测试框架编写,并要求单元测试可靠、可读并且可维护。只要产品代码不发生变化,单元测试的结果是稳定的。(百度的)
马三小伙儿
2018/09/12
2.9K0
【Unity游戏开发】浅谈Unity游戏开发中的单元测试
VR开发-VRTK(3.1.0)插件使用教程更新
最近插件更新了,很多以前的组件功能被修改了。表示蛋疼。。。 再说一次不要使用最新的Unity版本,尤其5.6,手柄渲染不出来 #Unity 5.5.1,目前官方最新是5.6.0 #SteamVR Plugin 1.2.1(目前是最新), #VRTK 3.1.0(目前是最新)
孙寅
2020/06/02
2.2K0
Unity与iOS交互,Unity脚本修改Xcode工程
Unity要在iOS平台发布,需要先生成Xcode工程,通常生成Xcode工程后我们还需要修改很多的配置,添加原生代码等, 而这些是可以通过cs脚本修改的,比如修改Xcode工程的plist、添加Framework库、拷贝文件到iOS工程、插入代码等
用户2215591
2021/03/02
1.7K0
【Unity3D入门教程】使用C#脚本控制游戏对象
使用C#脚本控制游戏对象,是一项必备的基本技能。Unity3D可以使用的脚本有C#和javascript等。我们主要讲注意力集中在C#上。本文将会介绍怎样使用脚本控制场景中的游戏对象。
全栈程序员站长
2022/09/23
1.4K0
【Unity3D入门教程】使用C#脚本控制游戏对象
Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
  Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、Windows Phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac 和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。
Edison Zhou
2018/08/20
2.2K0
Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
Unity基础教程系列(新)(一)——游戏对象和脚本(Creating+a+Clock)
这是有关学习使用Unity的基础知识的系列教程中的第一篇。在其中,我们将创建一个简单的时钟并对程序进行编程,以使其显示当前时间。你不需要具有Unity编辑器的任何经验,但是假定你一般具有多窗口编辑器应用程序的经验。
放牛的星星
2021/02/12
4.4K0
Unity基础教程系列(新)(一)——游戏对象和脚本(Creating+a+Clock)
【Unity3D】Unity 脚本 ③ ( C# 脚本的执行入口函数 | 获取当前游戏物体及物体名称 | 获取游戏物体的 Transform 组件数据 | UnityEngine 命名空间简介 )
在 C# 脚本中控制 游戏物体 GameObject 运动 , 要先获取该物体 , 然后 修改其 Transform 组件的属性 ;
韩曙亮
2023/03/30
1.4K0
【Unity3D】Unity 脚本 ③ ( C# 脚本的执行入口函数 | 获取当前游戏物体及物体名称 | 获取游戏物体的 Transform 组件数据 | UnityEngine 命名空间简介 )
unity3d怎么挖坑_unity游戏教程
1、rigidbody.addforce(Vector3 * speed) (见roll-a-ball)
全栈程序员站长
2022/09/29
3K0
unity3d怎么挖坑_unity游戏教程
Unity SKFramework框架(一)、Audio音频管理器
将AudioClip资产拖拽到“Drop AudioClips Here”区域以添加音频数据
CoderZ
2022/08/29
6360
Unity SKFramework框架(一)、Audio音频管理器
iOS_只执行一次、timer内重复点击,只执行最后一次
[NSObject cancelPreviousPerformRequestsWithTarget:self];
mikimo
2022/07/20
1.5K0

相似问题

脚本只工作一次

44

Unity3D -按钮只工作一次?

137

Openresty脚本只工作一次

31

jQuery脚本只工作一次

23

Roblox脚本只工作一次

214
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档