Recreating Metroid's Scan-Visor

Hello there!

I’d love to create something like Metroids Scan-Visor.
For those who don’t know, here’s a little breakdown on what it does:

• When visor is activated, all scan-able objects are colorized (this robot for example is colored green)
• A scan takes about 1 - 3 Seconds.
• When an object is being scanned, the visor automatically locks the players aim onto this target until…

  • The object is out of the players view (for example it’s hiding behind a wall)
  • The Players releases the scan-button
  • The object is out of range.
  • The scan is finished
    • When the scan is finished, the game pauses and it shows a description about the scanned object.

Here is an image of how the Scan Visor looks like:

As I learn Unreal Engine 4 on my own, I’m very unskilled about that, and thus, I hope somebody can answer me the following questions in detail :slight_smile: (As I don’t know how to even start with this)

  1. How can I highlight scannable objects? How do I tell the game which object is scannable and which isnt?
  2. How can I toggle the Visor’s visibility and functions on and off (as the Visor can be activated and deactivated)?
  3. I would go with a line trace every tick to check if the object isn’t behind a wall or is in range. Is this a good idea or is there a better way?
  4. How should I implement the function of showing the description-screen of a scanned object? Should I create a widget for every scannable object and show it accordingly, or do I create a description in the object’s blueprint and somehow send it to one global Scanning-Widget?

I hope this isn’t a too difficult task!
As I said, I’m not very experienced in this, so I hope somebody can explain things in detail or show me links or something like this which would send me on the right track :smiley:

Thank you so much for reading! :slight_smile:

  • Crimi

Hey! This shouldn’t be all the difficult to do in Blueprint, honestly.

1 & 2. I would put a bool bScannable on each actor and set it true for everything you want to be scannable. When you switch on the visor you could find all currently rendered actors (Rama has a plugin that can do just this: here) and if the actor is being rendered and has bScannable set to true, you can mess with its material parameters to give it whatever effect you want.

  1. You could do the above method to find if something is out of view, but yes, it something is in view but out of range a line trace would work fine.

  2. You got it. Each actor contains the information pertinent only to itself, and when the player initiates the scanning that data is routed to a global ScanningWidget to display for the player. This is the best way to do anything programming related (Blueprint included), have a master that everything talks to, instead of everything being its own master. Cuts down on bloat that way.

Hope that helps!

Hi there,
Kind of new to blueprints but I understand most the concepts.
I’m trying to make this same kind of thing.
My question-
What do you store the scanned object’s information in? I assume some sort of variable…
Once you have that in the blueprint… how do you retrieve it… I’m still struggling a bit with the concept of retrieving information from other actors
I have it set up for an overlap but I’m sort of at a loss for how to make this functionality.
You mention a global scanning widget… Is this talking about the unreal widgets that display text? … If so do you just make a widget and have the hud display it or do you need to store this somewhere too?