Code Monkey home page Code Monkey logo

egframework's Introduction

EGFramework 使用手册


引言

EGFramework全称Everyone's Godot framework,基于Godot开源引擎,使用C#编写,目前仅兼容Godot4.2 - .NET,部分兼容Godot3.5 - .NET,是完全开源的组件式,功能分布的框架,使用时可以自己根据需求安装对应的Module来实现对应的功能,同样也可以裁剪对应的Module来删减对应的功能。

ModuleEGFramework的核心组成部分,也是EGFramework中重要的扩展依据。详细可以查看第二部分-Module。

关于Godot引擎(摘自Godot Engine (4.x) 简体中文文档

Godot 引擎是一款功能丰富的跨平台游戏引擎,可以通过统一的界面创建 2D 和 3D 游戏。它提供了一套全面的通用工具,因此用户可以专注于制作游戏,而无需重新发明轮子。游戏可以一键导出到多个平台,包括主流的桌面平台(Linux、macOS、Windows)、移动平台(Android、iOS)、基于 Web 的平台以及主机平台。

Godot 在 宽松的 MIT 许可证 下完全自由且开源,没有附加条件、没有抽成、什么都没有。用户的游戏乃至引擎的每一行代码,都归用户自己所有。Godot 的开发完全独立且由社区驱动,允许用户为满足需求重塑引擎。它受到不以盈利为目标的 Godot 基金会支持。

一、准备工作

1.下载开发环境

本章节所有环境均在开源IDE VSCodeGodot4.2 - .NET 的环境下进行,请确保已经下载好VSCodeGodot4.2 - .NET,如果您有购买Rider或者其他编码工具可以根据自己的喜好来替代VSCode。

2.VSCode 插件安装

打开VSCode, 按下Ctrl+Shift+X,在搜索栏里面搜索C# Tools for Godot,安装该插件,因为该插件可能依赖于C#插件,同时需要安装C#插件。

同上,搜索并安装NuGet Package Manager GUI插件,用于Nuget包的安装与管理。

3.Nuget包的安装

打开VSCode,按下Ctrl+Shift+P,在搜索栏里面搜索Nuget Package ManagerGUI,选择右侧Install New Pakage ,依次安装以下依赖包:

  • System.IO.Ports(仅EGSerialPort 使用)

  • Newtonsoft.Json(使用场合较多)

  • Microsoft.Data.Sqlite(仅EGSQLite使用)

  • System.Text.Encoding.CodePages(ProtocolTools目录下均有使用)

注意:这些Nuget包仅为目前框架版本所用,后续可能会有新的Nuget包导入,会在此处列出。

4.删除不需要的Module(可选)

如果您只想使用部分功能,或者不想安装对应的Nuget包依赖,可以直接删除对应的Module脚本文件。

无需担心,除了部分Module存在相关依赖,大部分Module是支持直接删除的。

二、框架简介

由于该框架使用了较多的Nuget包实现相关的功能,所以安装较为繁琐,同时因为用到较多的扩展方法,提示词可能比较冗余。您可以通过删除对应的Module来定制化自己的框架,也可以新增自己的Module来扩展自己的框架。

本框架所使用的一切Nuget包均满足MIT开源协议,如果使用的Nuget包牵扯有其他协议请联系作者QQ:1031139173,会删除对应的Module功能保证该框架满足MIT协议。

协议文件均存放在目录addons\EGFramework\License_Third_Part下面

1.使用框架

添加using,并继承接口IEGFramework,即可使用该框架了。

以下以一个EGSave的例子,来展示一下框架的存档功能,其他详细用法可以参阅查看Manual-EGSave对应的部分。

using Godot;
using static Godot.GD;
using System.Collections.Generic;
using EGFramework;

public partial class EGTest : Node,IEGFramework{
    DataTest dataTest = this.EGSave().GetDataByFile<DataTest>();
    if (dataTest == null)
    {
        dataTest = new DataTest();
        dataTest.PlayerName = "Player1";
        dataTest.Hp = 100;
        this.EGSave().SetDataToFile(dataTest);
    }
}
public class DataTest{
    public string PlayerName;
    public int Hp;
}

2.直接使用Module

继承接口IEGFramework时,可以直接通过this.GetModule这个扩展方法直接获取该模块。上面的代码可以通过直接调用的方式改写成如下:

using Godot;
using static Godot.GD;
using System.Collections.Generic;
using EGFramework;

public partial class EGTest : Node,IEGFramework{
    DataTest dataTest = this.GetModule<EGSave>().GetDataByFile<DataTest>();
    if (dataTest == null)
    {
        dataTest = new DataTest();
        dataTest.PlayerName = "Player1";
        dataTest.Hp = 100;
        this.GetModule<EGSave>().SetDataToFile(dataTest);
    }
}
public class DataTest{
    public string PlayerName;
    public int Hp;
}

3.扩展框架(编写Module)

编写框架时,要用到IModule这个接口,任何继承了该接口的类均视为Module,可以被上面的方法Get到。

同时我们提供了一个简单的实现接口的抽象类EGModule,继承该类等同于实现接口IModule。

注意的是,因为C#仅支持单继承,如果您需要继承其他工具类或者是Godot的对应类,您应该使用接口而不是抽象类,具体用法可以参考ProtocolTools.EGProtocolSchedule这个类,它通过一个Node的生命周期的_Process()方法实现了特定线程中的消息拾取到主线程的功能。

一个简单的单例对象扩展可以写成如下:

using System;
using System.Collections.Generic;

namespace EGFramework
{
    public interface IEGObject
    {
        void RegisterObject<T>(T object_);
        T GetObject<T>() where T : class,new();
		
    }
    public class EGObject : EGModule,IEGObject
    {
        private IOCContainer ObjectContainer = new IOCContainer();
        public override void Init()
        {
            
        }

        public TObject GetObject<TObject>() where TObject : class,new()
        {
            if (!ObjectContainer.self.ContainsKey(typeof(TObject)))
            {
                this.RegisterObject(new TObject());
            }
            return ObjectContainer.Get<TObject>();
        }

        public void RegisterObject<TObject>(TObject object_)
        {
            ObjectContainer.Register(object_);
        }

        public bool ContainsObject<TObject>(){
            return ObjectContainer.self.ContainsKey(typeof(TObject));
        }
    }
    
    public static class CanGetObjectExtension
    {
        public static T EGGetObject<T>(this IEGFramework self) where T : class,new()
        {
            return EGArchitectureImplement.Interface.GetModule<EGObject>().GetObject<T>();
        }
    }
    public static class CanRegisterObjectExtension
    {
        public static void EGRegisterObject<T>(this IArchitecture self,T object_) where T : class,new()
        {
            self.GetModule<EGObject>().RegisterObject(object_);
        }
        public static void EGRegisterObject<T>(this IEGFramework self,T object_) where T : class,new()
        {
            EGArchitectureImplement.Interface.GetModule<EGObject>().RegisterObject(object_);
        }
    }

    public static class CanContainsObjectExtension{
        public static bool EGContainsObject<T>(this IEGFramework self)
        {
            return EGArchitectureImplement.Interface.GetModule<EGObject>().ContainsObject<T>();
        }
    }

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.