我的Canvas上有一个空的GameObject用于显示广告菜单,我通过检查器将其附加到一个单独的脚本(不在菜单本身上)中的公共变量中。
我正在使用adMenu在脚本中将其设置为非活动状态。SetActive(false),它在我的游戏的第一次玩透时起作用。但是,当我通过场景中的一个按钮重新启动场景时,菜单将失去对检查器中相同游戏对象的引用,我收到以下错误:
MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
这种情况从未发生在我身上,其他游戏对象在场景重新加载后以类似的方式初始化。
其他详细信息:
DontDestroyOnLoad()
不会在脚本或其附加的游戏对象上的任何位置使用代码:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;
using MEC;
public class AdManager : MonoBehaviour, IUnityAdsListener
{
internal static AdManager instance;
private static bool isInitialized = false;
public GameObject adMenu;
private string placement = "rewardedVideo";
void Start()
{
instance = this;
if (!isInitialized)
{
isInitialized = true;
Advertisement.AddListener(this);
Advertisement.Initialize(Constants.appleGameId, true);
}
}
IEnumerator<float> ShowAd()
{
if (!Advertisement.IsReady())
{
yield return Timing.WaitForOneFrame;
}
Advertisement.Show(placement);
}
public void CloseAdMenu()
{
Debug.Log("Is adMenu null: " + (adMenu == null)); // Returns false on first playthrough only
adMenu.SetActive(false);
}
public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
{
if (showResult == ShowResult.Finished)
{
CloseAdMenu();
}
}
public void OnUnityAdsReady(string placementId)
{
// throw new System.NotImplementedException();
}
public void OnUnityAdsDidError(string message)
{
// throw new System.NotImplementedException();
}
public void OnUnityAdsDidStart(string placementId)
{
// throw new System.NotImplementedException();
}
}
在您的重启方法上,您应该使用adMenu重新激活按钮。SetActive(true)
,如果没有,当您再次调用场景时,adMenu
GameObject
被禁用,因此您无法访问GameObject
。
也许您可以在AdManager中添加一个方法,如:
public void OpenAdMenu()
{
adMenu.SetActive(true);
}
并在AdManager上调用它。start()
发生的事情与菜单对象或静态实例无关。
问题是回调
public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
由于您通过注册实例
Advertisement.AddListener(this);
但是,在场景更改后,此实例将成为Destroyer。
如示例所示,您应该执行以下操作
private void OnDestroy()
{
Advertisement.RemoveListener(this);
}
问题内容: 我有2个fxml文件: 布局(标题,菜单栏和内容) Anchorpane(应该放在另一个fxml文件的内容中) 我想知道如何从“主”场景将第二个文件加载到内容空间内。在javaFX中工作是一件好事,还是加载一个新场景更好? 我正在尝试做这样的事情,但是不起作用: 谢谢您的帮助。 问题答案: 为什么您的代码不起作用 加载程序会创建一个新的AnchorPane,但是您绝不会将新窗格添加到场
null 我正试着做这样的事情,但它不起作用: 谢谢你的帮助。
我有一个非常简单的类,我想用它作为另一个类的子类。但当我将其代码放入父类时,我得到: 非静态变量,不能从静态上下文中引用 另一方面,当我将子类GenTest的类代码放在“父类”的类代码之外时,我没有得到这个错误。 为什么会发生这种情况?
我在第一个场景上有一个简单的按钮,应该会导致第二个场景。当我点击按钮时,它改变场景,但只显示一个空白屏幕。如果我关闭原始舞台,然后显示一个包含新场景的新舞台,它会正常工作,但我不想打开一个新窗口。 这是我的控制器类: 主类:
问题内容: java为什么无法从静态环境引用非静态? 问题答案: 要了解原因,你必须了解两者之间的区别。 实例(非静态)方法适用于特定类型(类)的对象。这些是使用新的创建的,如下所示: 要调用实例方法,请在实例(myObject)上调用它: 但是,只能直接在类型上调用静态方法/字段,如下所示: 前一条语句不正确。也可以使用诸如此类的对象引用来引用静态字段, myObject.staticMetho
我想知道为什么C中的函数重载解析在调用静态方法时会考虑非静态成员函数。 我已经阅读了这里的文档,其中指出 如果任何候选函数是成员函数(静态或非静态),但不是构造函数,则将其视为具有额外参数(隐式对象参数),该参数表示调用它们的对象并出现在第一个之前实际参数。 因此,请考虑以下代码。 那么调用A::foo(1.f,1.f)是不明确的。 静态成员函数用于非静态函数调用的重载解析,这很有意义。 但是为什