如何在在unity里做类扩展,创建一个C#文件? 5

有截图最好... 有截图最好 展开
 我来答
青丝青y亦青城
2016-04-30
知道答主
回答量:7
采纳率:0%
帮助的人:7633
展开全部

Extending the Editor


一)Unity允许你使用自己定制的inspectors和Editor Windows扩展编辑器,并且你可以使用定制的Property Drawers定义属性集在inspector中如何展示,这一块讲述如何使用这些特性。


Editor Windows


你可以在你的app中创建任意数量的定制窗口。它们的表现就像Inspector,Scene或者其它内置的窗口。这是给你的游戏添加一个子系统用户接口的绝佳方式。[比如地图编辑器]


做一个自定义的Editor Window包含以下几个简单步骤:


1.创建脚本,继承EditorWindow类


2.使用代码去触发窗口显示自己


3.为你的工具实现GUI代码


Derive From EditorWindow


二)为了制作你的Editor Window,你的脚本必须存放在一个叫做"Editor"的文件夹中。在这个脚本中创建一个类,它继承自EditorWindow.然后在内部的OnGUI方法里面编写你的GUI控制。

using UnityEngine;
using UnityEditor;
using System.Collections;
public class Example:EditorWindow
{
  void onGUI()
  {
    // The actual window code goes here   
  }
}
Showing the window


三)为了在屏幕上显示窗口,制作一个menu item来显示它,这个靠创建一个方法完成,而激活这个方法则是靠MenuItem属性。


Unity的默认行为是循环利用窗口(即:再次选择menu item会显示已经存在的窗口。这是靠使用EditorWindow.GetWindow方法实现),例如:

using UnityEngine;
using UnityEditor;
using System.Collections;
class MyWindow : EditorWindow {
    [MenuItem ("Window/My Window")]
    public static void  ShowWindow () {
        EditorWindow.GetWindow(typeof(MyWindow));
    }
    
    void OnGUI () {
        // The actual window code goes here
    }
}

四)这会创造一个标准的,可停靠的编辑窗口,它会在指令之间保存它的位置,可以使用自定义的布局,等等。想要获得更多的操控,你可以使用GetWindowWithRect.


Implementing Your Window's GUI


窗口中实际的内容靠实现OnGUI方法绘制。你在游戏内部GUI中使用的UnityGUI类(GUI和GUILayout)在这里也可以使用。此外我们提供了一些额外的GUI操作,它们在editor-only类里面:EditorGUI和EditorGUILayout。这些类添加在了普通类已经可用的控件集合里,所以你可以随意的混合搭配使用它们。


五)下面的C#代码展示了你如何添加GUI元素到自定义的EditorWindow中:

using UnityEditor;
using UnityEngine;
public class MyWindow : EditorWindow
{
    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;
    
    // Add menu item named "My Window" to the Window menu
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    {
        //Show existing window instance. If one doesn't exist, make one.
        EditorWindow.GetWindow(typeof(MyWindow));
    }
    
    void OnGUI()
    {
        GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
        myString = EditorGUILayout.TextField ("Text Field", myString);
        
        groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
            myBool = EditorGUILayout.Toggle ("Toggle", myBool);
            myFloat = EditorGUILayout.Slider ("Slider", myFloat, -3, 3);
        EditorGUILayout.EndToggleGroup ();
    }
}

六)样例代码的执行结果如下图:

匿名用户
2016-04-24
展开全部
如果是MonoBehaviour的话,直接用unity editor的Asset中新建一个C#代码资源,然后把基类改成你想要继承的那个类名。但是注意所有unity引擎提供的事件方法,例如Start Awake Update什么的那些函数,他们本身是不会进行子类自动override基类对应方法的。也就是说即使基类的Start方法声明成virtual,子类的Start如果不写些不会自动调用基类的Start。所以这种情况你就得自己处理了,比如子类Start()里面显示调用base.Start()。或者干脆再声明一套 protected virtual/abstract void OnStart();这样在基类Start里调用OnStart,然后派生类根据需要看看是不是用得着override一下OnStart也行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-04-24
展开全部
类扩展方法?雨松博客有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式