Learning Fluid Dynamics in a online multiplayer immersive 3D/VR learning environment

Update 21 – 02 – 2021

Sneak preview prototype, hit this link to visit the world

At the channel
At the sluice

Update 1 September 2020.

Update 7 june 2020.
Version 0.01. Simple prototype dedicated server and clients running om a server at Avans University. Looks a bit weird, but this is a milestone for me.


Update June 2020
Starting for the third time. read my thoughts.

Update 2019 First video on the project

Update June 2018
Followed several online courses on using blueprints in Unreal Engine.
See https://unreal.fluiddynamics.eu/main-water-system-in-unreal/

First video will follow soon?

Update October 2017. After a long time following courses on how to build in Unreal Engine, I finally have started with building blueprints. Busy building a watersystem

Update may 2017. I have reactivated the project. Was too busy with ordinary work :-). I am following a course on Udemy (Unreal Engine 4: How to Develop Your First Two Games) to get my skills on a higher level.

Share Button

Basic assignments watersystem

A list of basic assignments for students

  1. Measuring levels land and water. Making a cross section over the island.
  2. Calculate the wetted area (m2) for a cross section of the channel or ditch or pipe.
    Instruments needed:
    – fixed measure poles which shows the coordinates or a moveable device which the avatar can put at a location en which shows the coordinates.
    – Online calculator
    – something to store the data measured and calculated. Each avatar should have some kind of notebook.
  3. Measure the velocity in the channel. Could be with a device, or just something flowing in the water.
  4. Calculate discharge
Share Button

Sneak Preview prototype

There is a “first” version of a prototype of the world running.
The world lives on a server of Avans University of applied sciences. At this moment the main focus is on building a world in Unreal Engine running on a dedicated server.

If you have comments, questions, bugs … let me know at:
h.massink at avans.nl

current version is 0.7

You should be able to visit this world. You need to take the following steps:

step 1
Download and unzip the FD_Versie ….zip file from
This is my private GDRIVE so be patient.

step 2
Click on FluidDynamics.exe

step 3
Windows will probably complain. You need to thrust the file (me?).
If somebody know how to solve this, let me know 😊

step 3b optional.
Could be that Unreal has to install some software / drivers

step 4
The program has made contact with the server. There a limit number of usernames.
Hit the N button to find out which names are available. Password is not necessary.

Available names

Some remarks
– The messages you put in the chatbox (Y) are recorded.
– Hit the F and tell me the FPS in the chatbox
– Uninstall: Just delete the zip file and the unpacked maps.

Share Button

Q&A Dedicated Server


Q:What is the best method to update the playerlist. At the moment I use the Gamemode onpostlogin and on logout? This method could be inaccurate. Instead use OnTick to check number of players every tick. Only update widget when number has changed. On the other hand the number of players is only needed to check if a new client could get access.

Q: How can we use the Server Stat Replicator Class (Gamemode) to monitor the server?

Q: How to actually use the prelogin in C++ gamemode. For me this looks like high skilled programming. For example, how do you now the name and password of the client connecting and going through the prelogin? I get the idea that the students starts the program, enters his username and than makes contact with the server. So there is some kind of a lobbylevel. In the current project there is no lobbylevel.

Q:Is it possible to append a record to JSON file on disk, instead of reading the file, adding the record and writing the file again?

Q: If a new player comes into the world, he needs to get all the info of his world. For example , the definition of how all the other avatars look? What is the best way to get acces to this info. Through GameState?

Q: Is it correct that you can’t get access to to playerstate on the gamemode and gameinstance?

Q:Difference in use between Event Running on Server and Has Authority?

Q: Commandlines or bat file for automatically package server and client

Q: Explanation usage FString, static FString and const static FString

Q:Which software can be used for adjusting the Json PlayerInfo file outside of Unreal?

Q: How can the Server be monitored within Unreal

Q:What do the other methods of packaging (shipping, debugging) actually differ from development?

Q: What launcher software can we use? without annoying the virusscanner?

Q: How to run calculations on a different thread in C++

Q: Is het possible to adjust the watersystem in ue4.26.1 in runtime
A: Looks like this is not the case. For the watersystem on the island, I will try to use my system with the materials of the unreal watersystem.

Q:Should we store the PlayerInfo on the Server or on the clients
A:All Info will be stored on the Server

Q: Should we use Cars and Drones to travel in the world, or just teleporting?
A: Although Cars and Drones are more like the real world, Teleporting takes less time and is thereby preferable.

Q: How to change gamemode during runtime?
A: Project settings, GameModeClassAliases

Q:Is it possible to have a map in the World Outliner always collaps?
A:Shift and klik arrow at WorldMap and klik only on arrow again

Q: How to make sure a variable is not saved to disk.
A: Use setting Transient


Q: How to emulate bad internet in de editor.
A: Play > Advanced settings

simulate bad internet

Q:Video 42:39. Get access to gamemode in widget through game state. From client.
In this way you can get access to settings (variables) from the gamemode.

get access to gamemode
Share Button

FD Menu



  • WBP_ChatText
  • WBP_ChatWindow
  • WBP_ScreenMenu

Events ChatWindow

  • UpdateChatWindowInChatWindow

Share Button

FD Character


Names in project : FluidDynamicsCharacter (C++), BP_FDCharacter

Tasks :

  • asas

Events :

  • asas
Share Button

FD PlayerController


Names in project : FDPlayerController (C++), BP_FDPlayerController (BP)

Tasks :

  • Being the intermediair between server and client
    For example make connection between menu and gamemode (for chat)
  • Contains al Key events


  • UpdateChatWindow (Client)
  • GetChatMessage (Server)
  • InputActionChat
  • GetConnectedPlayersFromGM (Server)
  • ShowConnectedPlayers (Client)
  • PCSetPlayerNameInPS (Server)
  • FillConnectedPlayersInfoArrayGM (Server)
  • SetPlayerNameServer (Server)

Key Events

  • T (Chat window)
  • M (Mouse Cursor)
  • P (Print Connected Players through GameMode)
  • O (Print Connected Players through GameState)
  • F (FPS)
Share Button

FD PlayerState


Names in project : FDPlayerState (C++), BP_FDPlayerState (BP)

Tasks :

  • asas

Events :

  • cc

Share Button

FD GameStateBase


Names in project : FDGameStateBase (C++), BP_FDGameStateBase

Tasks :

  • sss

Events :

  • asas
Share Button

FD GameModeBase


Names in project : FDGameModeBase (C++), BP_FDGameModeBase (BP)


  • Keeping Track of the connected PlayerControllers
  • Distribute chat message’s to all connected Players


  • Event OnPostLogin
  • Event OnLogout
  • Event FillConnectedPlayerInfoArray
  • Event GMSetPlayerNameInPS

Share Button