Unity扩展了SceneManager类

时间:2016-10-23 14:16:49

标签: c# unity3d

我尝试扩展SceneManager类。

我这样写:https://unity3d.com/ru/learn/tutorials/topics/scripting/extension-methods

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public static class ExtensionMethods
{
    public static void LoadSceneWithSave(this SceneManager SceneManager) {
        Debug.Log("Debug LoadSceneWithSave");
    }
}

但是当我尝试使用这种新方法时:

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class SomeClass : MonoBehaviour 
{
    void Start () {
        SceneManager.LoadSceneWithSave();
    }
}

它不起作用。

1 个答案:

答案 0 :(得分:1)

,你可以。虽然,您需要在使用该新函数(SceneManager)之前显式创建LoadSceneWithSave类的实例。扩展方法需要该类的实例才能工作。

这应该有用

SceneManager mySeneManager = new SceneManager();
mySeneManager.LoadSceneWithSave();

transform示例Transform如何在没有实例的情况下工作?

它有一个实例。您需要创建它的实例而不能像public static class ExtensionMethods { public static void ResetTransformation(this Transform trans) { } } 类一样直接使用它的原因:

public class SomeClass : MonoBehaviour 
{
    void Start () {
        transform.ResetTransformation();
    }
}

<强> ...

SceneManager

是因为MonoBehaviour未在MonoBehaviourTransform的任何基类中声明。在transform类中声明了Component类名为Behaviour的实例,MonoBehaviour继承自public class Object { } public class Component : Object { public Transform transform { get; } //This is declared //...Other variables } public class Behaviour : Component { } public class MonoBehaviour : Behaviour { } 继承自的transform

这正是它的样子

public class SomeClass : MonoBehaviour 
{
    void Start () {
        transform.ResetTransformation();
    }
}

最后,这就是您可以使用MonoBehaviour变量访问其扩展方法的原因,如:

SceneManager

因为它已经声明并且您从MonoBehaviour继承了它。

如您所见,php.ini未在setfacl -m user:nginx:x /usr/share/nginx/outsidehtml/keystorage/类或其基类中的任何位置声明,并且您需要其实例来访问其任何扩展函数。