文章目录
前言
我们学编程,不要重复造工具。我之所以使用C# 开发Godot ,而不是Unity。很大的原因就是Godot.NET 支持Nuget的导入,因为Nuget是.NET Core 的第三方库。我也将Godot 的Visual Studio 项目的.NET 版本强制升级到的.NET Core 8.0版本,目前还没有任何问题。
Github项目地址,包含模板文件
后期思考补充
我将项目分成3层,从上到下是
- Godot:只是单纯挂载脚本
- GD_Program:负责游戏逻辑
- GD_Extension:通用的工具类
但是我后面想了一下,游戏逻辑也有部分是可以通用的,所以我感觉我的三层构造应该是存在过度封装了。两层封装说不定好一些。我后面打算先用两层封装好一点。等后面项目复杂度上来之后,再细分好了。
项目设置
编写失误
我写到后面的时候发现,Interfaces应当放在GD_Extension中。读者记得修改
环境
- window 10
- .net core 8.0
- godot 4.2.1
- visual studio 2022
visual studio 配置
- GD_Extesion:Godot工具类,后面用于导出
- Assests:资源文件夹
- Utils:工具类
- Interfaces:接口类
- GD_Program:Godot运行逻辑
- SceneModels:场景脚本实际运行类,IOC装配生成
- Services:服务类
- Program.cs:IOC容器位置
- Godot:Godot引擎生成解决方案
- Scene:挂载脚本,只用于建立脚本连接关系
详细的配置看我这篇文章
Nuget 推荐
Nuget | 介绍 |
---|---|
Newtonsoft.Json | 高性能Json序列化库 |
Bogus | 随机测试数据生成,比如随机数据,随机人民,地名,手机号,账号,密码 |
Microsoft.Extensions.DependencyInjection | 微软IOC框架,个人推荐 |
Autofac | 第三方IOC 框架,性能也不错 |
Nlog | 日志管理 |
FreeSql | 数据库ORM框架,个人推荐 |
SqlSugar | 数据库ORM框架,一般来说够用了,游戏开发也不是高频并发操作 |
MiniExcel | Excel ORM框架,简易操作。建议使用CSV |
Microsoft.AspNetCore.SignalR.Common | 微软开发即时通讯框架,用于解决多人联网 |
Grpc | 谷歌开发的即使通讯框架,用于解决多人联网 |
NewtonSoft 成功
//以匿名对象为例
GD.Print(JsonConvert.SerializeObject(new
{
Name = "小王",
Age = "24"
}));
Bogus 成功
Github文档地址
随机生成
//以随机数为例
var faker = new Faker();
for(var i = 0; i < 10; i++)
{
GD.Print($"Bogus,int 0-10:[{
faker.Random.Int(0, 10)}]");
}
构造器生成
public class MyStudent
{
public int Id {
get; set; }
public string? Name {
get; set; }
public int Age {
get; set; }
/// <summary>
/// 构建faker构造器
/// </summary>
public static Faker<MyStudent> Faker = new Faker<MyStudent>()
.RuleFor(t=>t.Id,f=>f.IndexFaker)
.RuleFor(t=>t.Name,f=>f.Name.FindName())
.RuleFor(t=>t.Age,f=>f.Random.Int(10,30));
}
//以构造器为例
for (var i = 0; i < 10; i++)
{
var stu = MyStudent.Faker.Generate();
GD