我尝试扩展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();
}
}
它不起作用。
答案 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
未在MonoBehaviour
或Transform
的任何基类中声明。在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/
类或其基类中的任何位置声明,并且您需要其实例来访问其任何扩展函数。