Passer au contenu principal

2021 Nov: Unreal Engine 5?

· 7 minutes de lecture
Gabriel T. Nardy
nanos world developer (SyedMuhammad)

Nouvelles Classes, Expérimentations avec Unreal Engine 5 et Améliorations du Scripting!

Nouvelle Classe: Decal

Nous avons ajouté une nouvelle classe pour faire apparaître des Decals! Decals are Materials that are projected onto meshes in your level, including Static Meshes and Skeletal Meshes. Vous pouvez charger n'importe quel .jpg depuis le disque pendant l'exécution, et l'utiliser comme paramètre dans votre Matériel de Decal !

Comme les statuts sont hérités des Acteurs, vous pouvez changer son emplacement, la rotation, l'attacher ou appeler n'importe quelle méthode de Base Actor sur lui !

Nouvelle Classe: Billboard

Nous avons ajouté une nouvelle classe pour faire apparaître des Billboards! A Billboard is a 2D Material that will be rendered always facing the camera. Il est également possible d'utiliser toutes les méthodes personnalisées de Paintable et de faire apparaître des textures personnalisées. Vous pouvez modifier ses propriétés de matériaux avec Base Paintable ou même utiliser un matériau de votre choix.

Comme les Billboards héritent des Acteurs, vous pouvez changer leur emplacement, leur rotation, les attacher ou appeler n'importe quelle méthode de Base Actor sur eux !

Nouvelle Classe: Melee

Nous recevons une toute nouvelle classe très demandée : Melee! La classe Melee arrive pour remplacer l'ancienne classe Item.

Melee est une nouvelle Classe (qui fonctionne exactement comme l'ancien Item) mais avec la capacité d'attaquer avec. Il est possible d'ajouter des animations personnalisées, un temps de recharge et d'ajuster les dégâts de celles-ci. La physique des attaques est basée sur l'animation de manière procédurale, ce qui signifie que vous pouvez poignarder, taillader ou même frapper des objets en changeant l'animation et le coup sera basé sur celle-ci !

Les résultats sont assez amusants, les coups/dommages affectent également l'environnement dynamiquement 😊

Amélioration des scripts

Nous avons écouté votre demande et nous apportons enfin les nouvelles fonctionnalités de scripting tant attendues !

Véritable Hot Reload

Après plusieurs demandes, nous avons commencé à implémenter une vraie fonctionnalité de Hot Reload !

Le vrai Hot Reload est une fonctionnalité étonnante qui vous permet de charger un nouveau code de script sans devoir perdre tout l'état de mémoire actuel de vos Packages. Il fonctionne en chargeant les fichiers de script sur la VM Lua en cours d'exécution.

Actuellement il fonctionne en le déclenchant manuellement dans la console :

package hotreload [NOM_DU_PACKAGE|all]

Cela mettra à jour les clients avec la version plus récente des fichiers et chargera les fichiers Index.lua à partir des packages. Il conservera l'état actuel de la mémoire des paquets. Il désabonnera également tous les événements enregistrés dans ce package.

Dans le futur, il serait possible d'ajouter un vérificateur en temps réel pour mettre à jour automatiquement les fichiers modifiés après les avoir enregistrés.

Extension des Classes

L'extension et l'héritage des Classes de nanos world constituent une nouvelle fonctionnalité intéressante. Ceci est toujours expérimental et nous voulons recueillir vos commentaires et trouver les bogues restants.

Il est maintenant possible d'ajouter de nouvelles méthodes aux Classes de nanos world, Remplacer les Méthodes existantes et même Remplacer __index et __newindex.

L'ajout d'une nouvelle méthode à une classe est simple comme bonjour :

-- Ajout d'une nouvelle méthode 'AddScore' à la classe Player
function Player:AddScore(score)
self:SetValue("score", self:GetValue("score", 0) + score)
end

-- L'utiliser
my_player:AddScore(10)

Lisez la documentation complète ici.

New View Mode: TopDown

We created a new native View Mode: TopDown!

This ViewMode allows you to fully control Characters from a TopDown perspective.

With just a single line:

my_character:SetViewMode(ViewMode.TopDown)

nanos world becomes a completely different game, the mouse is now a crosshair which the Character aims to. Mechanics of picking up Weapons, grabbing Props and interacting with stuff was slightly modified to work with the ViewMode. Also driving is fully supported as well! 🤩

It also is possible to dynamically change the view mode and switch between them during game-play and also tweak settings such as camera distance and so on.

New Camera Methods

Player got a bunch of new Camera methods: Player:SetCameraSocketOffset(), Player:SetCameraArmLength().

And also ability to detach and attach it to other actors (👀 including Props): Player:AttachCameraTo() and Player:ResetCamera(). It will attach including a Camera SpringArm component!

Note: Spectate methods from Client has been moved to Player: Player:Spectate().

TextRender on Server Side

Now the Class TextRender now can be spawned on Server Side as well!

Other Changes

Besides the major topics covered here, we've got several other new features which were been added during the month:

  • Added a new method for Character: Character:Follow() which will make the AI follow other actor.
  • Added a new Utils method: NanosUtils.Benchmark() which will take a function as parameter and test the performance of it.
  • Now Subscribe will return the callback function (which can be used to Unsubscribe afterwards).
  • Fixed tons of bugs, detailed information can be found in the Discord Changelog channel.

Unreal Engine 5

Lastly, it is already known we have a big objective of porting nanos world to Unreal Engine 5. Personally this is something I wanted to do as soon as possible because Unreal Engine 5 features are amazing, not to mention the publicity and marketing bonuses we would get for nanos world.

In this month, we decided to give a try: we tested porting nanos world to Unreal 5, at first we had some problems because of some Unreal modules have been completely renamed or even removed. And also we got some Unreal methods deprecated by the newer version, so we needed to update them and even reimplement some small stuff.

Currently Unreal Engine 4 uses PhysX physics and in Unreal 5 all the Physics Engine have been replaced by Unreal's Chaos, which is a new Engine replacing the NVIDIA's PhysX.

This made us need to disable Vehicles for this test, as Unreal vehicles are very dependent on the PhysX engine and I would need to reimplement them using the new Chaos API for vehicles (I believe that our Vehicles API will need to change a bit as well once we fully update it).

But after half of dozen adaptions and disabled Vehicles, the results were surprisingly good! nanos world worked on Unreal Engine 5! Personally I got very happy and proud that the biggest problems I had was updating deprecate methods and updating some Unreal modules, thanks to the architecture developed so far in nanos world!

Graphical Results

nanos world on Unreal Engine 5 is beautiful, joying with Lumen and Global Illumination is really fun!

There were some graphical artifacts (such as changing the time of day too fast causing a delay/ghosting effect), but I believe they will improve them for the final Unreal Engine 5 version.

Check it out some screenshots taken during the tests trying the Global Illumination and Lumen:

Stability

Unfortunately the stability was extremely bad. It didn't surprise me too much as Unreal Engine 5 is on Early Access, so bugs and crashes would happen. Several random crashes occurred during gameplay, I could notice mostly of them were caused by the new Chaos Engine (related to Physics).

What now?

I was really happy in being able to port nanos world to Unreal Engine 5, this attempt made us be sure that this would be possible. But I decided that currently is not time yet. During the tests we had several crashes (random ones, related to the low-level of Unreal, mainly coming from Chaos Engine and from Water) that made us conclude that is better to wait a better stable version because it makes nanos world really unplayable. Those random crashes are extremely bad as sometimes it's hard to know if it's my or Unreal's fault.

Fortunately, with this we could prove ourselves that nanos world will, when the time comes, be compatible and updated to Unreal Engine 5!