gpt4 book ai didi

c# - 从 Unity 中的另一个命名空间访问公共(public)方法

转载 作者:行者123 更新时间:2023-12-04 16:59:05 30 4
gpt4 key购买 nike

我正在尝试从 ARCoreBackgroundRenderer 访问公共(public)方法属于 MonoBehavior 的类,位于 GoogleARCore命名空间,在另一个也是 MonoBehavior 的类中,命名为 UIController并位于另一个名为 CompanyController 的命名空间中.这可能吗?我该怎么做?

我试图在第二堂课中调用的方法是:

public void DisableARBackgroundRendering()
{
if (m_CommandBuffer == null || m_Camera == null)
{
return;
}

m_Camera.clearFlags = m_CameraClearFlags;

.......

}

我想用一个简单的方法在我的第二个类中调用这个方法。

最佳答案

一般来说,引用 API 会有所帮助。

ARCoreBackgroundRenderer ( API Reference ) 正如你所说的你自己是 类(class)在命名空间 GoogleARCore .. 所以通过导入

using GoogleARCore;

或使用
GoogleARCore.ARCoreBackgroundRenderer

UIController 中输入您的代码.
using UnityEngine;
using GoogleARCore;

namespace CompanyController
{
public class UIController : MonoBehaviour
{
// Reference this via the Inspector by drag and drop
// [SerializeField] simply allows to serialize also private fields in Unity
[SerializeField] private ARCoreBackgroundRenderer arRenderer;

// Alternatively you could as said use the type like
//[SerializeField] private GoogleARCore.ARCoreBackgroundRenderer arRenderer;

private void Awake ()
{
// As a fallback find it on the scene
if(!arRenderer) arRenderer = FindObjectOfType<ARCoreBackgroundRenderer>();
}

public void DisableARBackgroundRendering()
{
// Now use any public method of the arRenderer
arRenderer.SomePublicMethod();
}
}
}

但是,您也可以看到方法 DisableARBackgroundRenderingprivate你将无法使用它。还有 m_Cameram_CommandBuffer都是 private所以你将无法访问它们。

你什么 可以 并且 - 如果你仔细观察 ARBackgroundRenderer 的实现- 想要这里要做的只是启用和禁用相应的组件:
public void EnableARBackgroundRendering(bool enable)
{
arRenderer.enabled = enable;
}

因为在内部它会自己处理其余的事情,你不需要进一步访问它的方法、字段和属性:

private void OnEnable()
{
if (BackgroundMaterial == null)
{
Debug.LogError("ArCameraBackground:: No material assigned.");
return;
}

LifecycleManager.Instance.OnSessionSetEnabled += _OnSessionSetEnabled;

m_Camera = GetComponent<Camera>();

m_TransitionImageTexture = Resources.Load<Texture2D>("ViewInARIcon");
BackgroundMaterial.SetTexture("_TransitionIconTex", m_TransitionImageTexture);

EnableARBackgroundRendering(); // AS YOU SEE IT ALREADY CALLS THIS ANYWAY
}

private void OnDisable()
{
LifecycleManager.Instance.OnSessionSetEnabled -= _OnSessionSetEnabled;
m_TransitionState = BackgroundTransitionState.BlackScreen;
m_CurrentStateElapsed = 0.0f;

m_Camera.ResetProjectionMatrix();

DisableARBackgroundRendering(); // AS YOU SEE IT ALREADY CALLS THIS ANYWAY
}

关于c# - 从 Unity 中的另一个命名空间访问公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314506/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com