Consíguelo en Microsoft Store
Documentación
Discordia
El motor 3D se encuentra actualmente en una etapa inicial de desarrollo y aún no está equipado con las características esenciales necesarias para un motor de juego listo para producción. Sin embargo, se ha establecido una hoja de ruta de desarrollo clara y con visión de futuro, y se está trabajando activamente para implementar sistemas avanzados como geometría virtualizada y cascadas de radiación para una iluminación global totalmente dinámica. A medida que avanza el desarrollo, planeo fomentar una comunidad a partir del próximo año, con el objetivo de crear un motor de juego C# que se integre perfectamente con los flujos de trabajo de Unity. Con su apoyo, podemos crear un motor potente y fácil de usar, completo con un editor, que satisfaga las demandas del desarrollo de juegos moderno.
Un proyecto de muestra de 3D Engine que demuestra las capacidades de 3D Engine. Voxel Sandbox implementa las siguientes características:
Todos los componentes están escritos en C#, lo que muestra cómo aprovechar las funcionalidades del motor 3D para crear una aplicación con todas las funciones.
Instale el paquete a través de NuGet Package Manager para integrarlo en su proyecto.
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 >
Asegúrese de que "PreserveNewest" esté configurado para los archivos en la carpeta Activos en Visual Studio. Reemplace la ruta al paquete 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 ) ;
El repositorio de 3D Engine incluye:
Puede crear 3DEngine (paquete) tanto para el editor como para el motor como una aplicación MSIX o para el motor como una aplicación Win32 portátil.
Para compilar el motor 3D, asegúrese de tener Visual Studio 2022 con los siguientes componentes: