Holen Sie es sich im Microsoft Store
Dokumentation
Zwietracht
Die 3D-Engine befindet sich derzeit in einem frühen Entwicklungsstadium und verfügt noch nicht über die wesentlichen Funktionen, die für eine serienreife Game-Engine erforderlich sind. Es wurde jedoch eine klare und zukunftsweisende Entwicklungs-Roadmap erstellt, in der aktiv daran gearbeitet wird, fortschrittliche Systeme wie virtualisierte Geometrie und Strahlungskaskaden für eine vollständig dynamische globale Beleuchtung zu implementieren. Mit fortschreitender Entwicklung plane ich, ab dem nächsten Jahr eine Community aufzubauen, mit dem Ziel, eine C#-Spiel-Engine zu entwickeln, die sich nahtlos in Unity-Workflows integrieren lässt. Mit Ihrer Unterstützung können wir eine leistungsstarke und benutzerfreundliche Engine inklusive Editor erstellen, die den Anforderungen moderner Spieleentwicklung gerecht wird.
Ein 3D-Engine-Beispielprojekt, das die Fähigkeiten der 3D-Engine demonstriert. Voxel Sandbox implementiert die folgenden Funktionen:
Alle Komponenten sind in C# geschrieben und zeigen, wie Sie die Funktionalitäten der 3D Engine nutzen können, um eine voll funktionsfähige Anwendung zu erstellen.
Installieren Sie das Paket über den NuGet Package Manager zur Integration in Ihr Projekt.
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 >
Stellen Sie sicher, dass „PreserveNewest“ für Dateien im Ordner „Assets“ in Visual Studio festgelegt ist. Ersetzen Sie den Pfad zum NuGet-Paket 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 ) ;
Das 3D Engine-Repository umfasst:
Sie können die 3DEngine (Paket) sowohl für den Editor als auch für die Engine als MSIX-Anwendung oder die Engine als portable Win32-Anwendung erstellen.
Stellen Sie zum Kompilieren der 3D-Engine sicher, dass Sie über Visual Studio 2022 mit den folgenden Komponenten verfügen: