Получите его в Microsoft Store
Документация
Раздор
3D Engine в настоящее время находится на ранней стадии разработки и еще не оснащен необходимыми функциями, необходимыми для готового к производству игрового движка. Тем не менее, была разработана четкая и перспективная дорожная карта развития, и ведется активная работа по внедрению передовых систем, таких как виртуализированная геометрия и каскады излучения для полностью динамического глобального освещения. По мере продвижения разработки я планирую, начиная со следующего года, развивать сообщество с целью создания игрового движка C#, который будет легко интегрироваться с рабочими процессами Unity. С вашей поддержкой мы сможем создать мощный и удобный движок с редактором, отвечающий требованиям современной разработки игр.
Пример проекта 3D Engine, демонстрирующий возможности 3D Engine. Voxel Sandbox реализует следующие функции:
Все компоненты написаны на C#, что демонстрирует, как использовать функциональные возможности 3D Engine для создания полнофункционального приложения.
Установите пакет через диспетчер пакетов NuGet для интеграции в ваш проект.
dotnet new console -n Project
cd Project
dotnet add package 3DEngine
dotnet add package Costura.Fody
./Project.csproj
< Project Sdk = " Microsoft.NET.Sdk " >
< PropertyGroup >
< OutputType >WinExe</ OutputType >
< TargetFramework >net8.0-windows10.0.22621.0</ TargetFramework >
< ImplicitUsings >enable</ ImplicitUsings >
< SatelliteResourceLanguages >en</ SatelliteResourceLanguages >
< PlatformTarget >x64</ PlatformTarget >
< PublishAot >true</ PublishAot >
</ PropertyGroup >
< ItemGroup >
< None Remove = " FodyWeavers.xml " />
</ ItemGroup >
< ItemGroup >
< PackageReference Include = " 3DEngine " Version = " 3.1.0 " />
< PackageReference Include = " Costura.Fody " Version = " 5.7.0 " >
< PrivateAssets >all</ PrivateAssets >
</ PackageReference >
</ ItemGroup >
< ItemGroup >
< Content Update = " $(NuGetPackageRoot) 3DEngine 3.1.0contentFilesanynet8.0-windows10.0.22621AssetsResources*** " >
< CopyToOutputDirectory >PreserveNewest</ CopyToOutputDirectory >
</ Content >
</ ItemGroup >
< ItemGroup >
< None Update = " AssetsGeneratorsFileNamesEnumGenerator.tt " >
< Generator >TextTemplatingFileGenerator</ Generator >
< LastGenOutput >FileNamesEnumGenerator.cs</ LastGenOutput >
</ None >
</ ItemGroup >
< ItemGroup >
< Service Include = " {508349b6-6b84-4df5-91f0-309beebad82d} " />
</ ItemGroup >
< ItemGroup >
< Compile Update = " AssetsGeneratorsFileNamesEnumGenerator.cs " >
< DesignTime >True</ DesignTime >
< AutoGen >True</ AutoGen >
< DependentUpon >FileNamesEnumGenerator.tt</ DependentUpon >
</ Compile >
</ ItemGroup >
</ Project >
Убедитесь, что для файлов в папке «Ресурсы» в Visual Studio установлено значение «PreserveNewest». Замените путь к пакету NuGet 3DEngine 3.1.0.
class Program
{
[ STAThread ]
private static void Main ( ) =>
new Engine . Program ( ) . Run (
config : Engine . Config . GetDefault (
windowCommand : Engine . WindowCommand . Show ,
presentInterval : Engine . PresentInterval . Immediate ,
multiSample : Engine . MultiSample . x4 ,
resolutionScale : 1 ,
title : "3D Engine" ,
width : 2560 , height : 1440 ,
renderGUI : true , defaultBoot : true ) ,
initialization : ( ) =>
Engine . Kernel . Instance . SystemManager . MainEntityManager . CreateEntity ( ) . AddComponent < GameManager > ( ) ,
frame : ( ) => { } ) ;
}
using System ;
using System . Collections ;
using System . Numerics ;
using Engine ;
using Engine . Buffer ;
using Engine . Components ;
using Engine . DataStructures ;
using Engine . ECS ;
using Engine . Editor ;
using Engine . Framework ;
using Engine . Graphics ;
using Engine . GUI ;
using Engine . Helper ;
using Engine . Runtime ;
using Engine . Utilities ;
public class Example : Component
{
[ ToolTip ( "This is a ToolTip" ) ]
[ Show ]
private string _visibleString = "This field is private" ;
[ Hide ]
public string HiddenString = "This field is public" ;
[ ShowOnly ]
public string ShowOnlyString = "This string is not editable" ;
public int Int ;
public float Float ;
public Vector2 Vector2 ;
public Vector3 Vector3 ;
public Vector4 Vector4 ;
[ Slider ( 1 , 100 ) ]
public float Slider ;
public bool Bool ;
[ If ( "Bool" , "True" ) ]
[ ShowOnly ]
public string IfField = "This field is only visible if the bool is true" ;
[ IfNot ( "Bool" , "True" ) ]
[ ShowOnly ]
public string IfNotField = "This field is only visible if the bool is not true" ;
[ Color ]
public Vector4 Color ;
public Entity ? _Entity ;
[ Space ]
[ Header ( "Header" ) ]
public event Action ? Event ;
// This is the base function of OnRegister.
public override void OnRegister ( ) =>
ScriptSystem . Register ( this ) ;
public override void OnAwake ( ) { }
public override void OnStart ( ) { }
public override void OnUpdate ( ) { }
public override void OnLateUpdate ( ) { }
public override void OnFixedUpdate ( ) { }
public override void OnRender ( ) { }
public override void OnGUI ( ) { }
public override void OnDestroy ( ) { }
}
Engine . Loader . ModelLoader . LoadFile ( Engine . ModelFiles . Model ) ;
Engine . Loader . ModelLoader . LoadFile ( Engine . Utilities . AssetPaths . MESHES + "Model.obj" ) ;
Engine . Loader . ImageLoader . LoadFile ( Engine . TextureFiles . TextureAtlas ) ;
Engine . Loader . ImageLoader . LoadFile ( Engine . Utilities . AssetPaths . TEXTURES + "Texture.png" ) ;
Engine . Kernel . Instance . Context . CreateShader ( Engine . Utilities . AssetPaths . SHADERS + "Shader" ) ;
Engine . Kernel . Instance . Context . CreateComputeShader ( Engine . Utilities . AssetPaths . COMPUTESHADERS + "ComputeShader" ) ;
Entity . AddComponent < Example > ( ) ;
Entity . Manager . CreateEntity ( name : "Controller" ) . AddComponent < PlayerController > ( ) . Initialize ( this ) ;
Entity . Manager . CreateEntity ( name : "Sky" ) . AddComponent < DefaultSky > ( ) . Initialize ( ) ;
var mesh = Entity . Manager . CreateEntity ( ) . AddComponent < Mesh > ( ) ;
mesh . SetMeshData ( ModelFiles . Model ) ;
mesh . SetMeshData ( Assets . Meshes [ "Model.obj" ] ) ;
mesh . SetMeshData ( vertices , indices , positions , new InputLayoutHelper ( ) . AddPosition3D ( ) . AddUV ( ) ) ;
mesh . SetRootSignature ( ) ;
mesh . SetRootSignature ( new RootSignatureHelper ( ) . AddConstantBufferView ( 2 ) . AddShaderResourceViewTable ( ) ) ;
mesh . SetMaterialTextures ( TextureFiles . Texture ) ;
mesh . SetMaterialTextures ( textureEntries : [ new ( "Texture.png" , 0 ) ] ) ;
mesh . SetMaterialPipeline ( ShaderFiles . Shader ) ;
mesh . SetMaterialPipeline ( "Shader" ) ;
Engine . Utilities . Output . Log ( Entity . Transform . Position ) ;
if ( Input . GetKey ( Key . Escape , InputState . Down ) )
{
PAUSED = ! PAUSED ;
if ( PAUSED )
Input . SetMouseLockState ( MouseLockState . Unlocked ) ;
else
Input . SetMouseLockState ( MouseLockState . LockedInvisible , 0.5 , 0.5 ) ;
}
if ( ! PAUSED )
Input . SetCursorIcon ( SystemCursor . IDC_CROSS ) ;
Репозиторий 3D Engine включает в себя:
Вы можете собрать 3DEngine (пакет) как для редактора, так и для Engine в виде приложения MSIX или Engine в качестве переносимого приложения Win32.
Чтобы скомпилировать 3D Engine, убедитесь, что у вас установлена Visual Studio 2022 со следующими компонентами: