zoukankan      html  css  js  c++  java
  • Unity Editor 工具开发 (三)——数据存储工具 -1

    Unity EditorTool Dev Tutorial(三)——数据存储工具

    最近,公司项目新开,要笔者写一些给策划用的工具,对Unity有了解的朋友肯定知道Unity的插件工具是十分丰富的,提供的API能让开发者自定义工具。于是作为小白的笔者,也一股脑扎进了工具开发的漩涡中。发现关于Editor的基础教程,在国内非常少,于是,笔者便有了记录学习Editor的想法。本文将持续记录笔者从零搭建工具的所见所闻。

    前言

    笔者也是在学习Editor中,写下的这篇记录,若有对该工具的感兴趣,笔者在Github上更新这个项目,一套正在开发的工具。Ps:没写Readme的

    章节介绍

    承接上一章,确立目标,是建立一个数据存储工具,一个类似数据库的工具。

    1. 完成品介绍

    样例图如下:

    1. 主界面

    1. 新建表单

    1. 数据字段增删改查

    1. 文件读取/保存

    实现这个工具主要涉及四个方面的Unity知识:
    a. GUI的界面布局
    b. Unity的Asset 可持久保存文件
    c. 数据的序列化与反序列化(自定义其方式)
    d. 一些Unity提供的控件功能接口(Utilities)

    这其中前两项最为基础,本篇主要介绍界面布局,其他的在后续章节中介绍。

    2. UI绘制元素

    在UGUI还没有集成的时候,Unity的原生UI是靠GUI/GUILayout 来实现的,这两个工具类,不像NGUI和UGUI一样,可视化较差。效果基本都是靠代码一行一行码出来的。虽然操作上比较繁琐,但是功能还是较为完善的。此外针对Editor编程,是无法UGUI和NGUI的。

    在原生UI的绘制类上,Unity提供了四种:GUI/GUILayout 和EditorGUI/EditorGUILayout。
    前两者,在UnityEngine库中,后两者在UnityEditor库中
    因此在游戏运行时,前两种可用于绘制游戏UI,而后两者只能在Unity编辑器中显示
    Editor的绘制类可看作是GUI的绘制类的引申,使得其更适合用于绘制工具,比如GUI上只有Text输入框的绘制,而Editor的绘制工具,具有IntField/FLoatField等,区分更加细致。
    因此推荐在GUI没有你想绘制的元素种类时,可以在EditorGUI上找找。
    Layout 与 不带Layout 之间的方法几乎是一致的,如EditorGUI和EditorGUILayout,可绘制的内容没有区别,但是Layout提供了简单的 位置/长宽/相对位置的处理方法,而GUI和EditorGUI,需要额外提供一个Rect 参数
    总结:Layout在位置没有特殊要求时,速度较快,因为另外的绘制要输入一个Rect描述元素的坐标和尺寸。

    3. 常用绘制函数

    只有函数名的默认四个类皆具备该函数。

    • Label -------- 显示标签

    • TextField/TextArea -------- 文本输入框,TextField为单行,TextArea为多行。但实际上通过修改GUIStyle,TextField也能多行,参数为文本框显示值,返回值为设置值。

    • Button -------- 按钮。该函数有返回值,当按钮按下时返回True,未按下返回False

    • GUILayout.Width(float x)/GUILayout.Height(float) -------- 设置UI元素的长宽。GUI的可变数目参数。如对默认的长宽不满意,或者想要固定大小,可使用。

    c#
    private string text //如要正常使用文本框,请切记不能使用局部变量保存文本。
    OnGUI(){
    text=GUILayout.TextField(text,GUILayout.width(80));
    }

    
    - GUILayout.BeginHorizontal/GUILayout.EndHorizontal 及GUILayout.BeginVertical/GUILayout.EndVertical -------- 控制UI元素在一行,或者在一列。(默认一个UI元素独占一行,使用Layout绘制的)
    ```c#```
    OnGUI(){
    	GUILayout.BeginHorizontal();	//在两者之间,及保持一行排版。切记有Begin 必须对应有End。否则会出错。也不要给这种函数加IF/ELse的逻辑
    	GUILayout.Label("1");
    	GUILayout.Label("2");
    	GUILayout.Label("3");
    	GUILayout.Label("4");
    	GUILayout.EndHorizontal();
    }
    

    TO Be Continue Soon!

  • 相关阅读:
    今天开始用 VSU 2010
    Visual Studio 2010 模型设计工具 基本应用
    Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
    Enterprise Library 4.1 Security Block 快速使用图文笔记
    解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”(图)
    一个Oracle存储过程示例
    Enterprise Library 4.1 Application Settings 快速使用图文笔记
    Oracle 10g for Windows 简体中文版的安装过程
    Oracle 11g for Windows 简体中文版的安装过程
    Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
  • 原文地址:https://www.cnblogs.com/EffectL/p/7783053.html
Copyright © 2011-2022 走看看