BlueBeard.Holograms 0.1.0-ci.24

This is a prerelease version of BlueBeard.Holograms.
dotnet add package BlueBeard.Holograms --version 0.1.0-ci.24
                    
NuGet\Install-Package BlueBeard.Holograms -Version 0.1.0-ci.24
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="BlueBeard.Holograms" Version="0.1.0-ci.24" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="BlueBeard.Holograms" Version="0.1.0-ci.24" />
                    
Directory.Packages.props
<PackageReference Include="BlueBeard.Holograms" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add BlueBeard.Holograms --version 0.1.0-ci.24
                    
#r "nuget: BlueBeard.Holograms, 0.1.0-ci.24"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package BlueBeard.Holograms@0.1.0-ci.24
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=BlueBeard.Holograms&version=0.1.0-ci.24&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=BlueBeard.Holograms&version=0.1.0-ci.24&prerelease
                    
Install as a Cake Tool

BlueBeard.Holograms

A proximity-based hologram system for Unturned. Place 3D holograms in the world that automatically show/hide UI overlays when players walk near them. Supports pooling, per-player state, global allocation, and dynamic metadata updates.

Installation

Add a project reference:

<ProjectReference Include="..\BlueBeard.Holograms\BlueBeard.Holograms.csproj" />

Concepts

  • HologramDefinition -- A world position + trigger radius. Defines where a hologram exists.
  • Hologram -- A pooled UI/Effect pair. The Effect is the 3D visual; the UI is the screen overlay.
  • IHologramDisplay -- Your code that populates the UI when a player enters the zone.
  • HologramRegistration -- Bundles definitions, pool, and display together for batch registration.

Setup

using BlueBeard.Holograms;

var hologramManager = new HologramManager();
hologramManager.Load();

// On unload:
hologramManager.Unload();

Defining Holograms

1. Create the Pool

Each hologram in the pool is an Effect/UI pair from your Unity asset bundle:

var pool = new List<Hologram>
{
    new() { UI = 50600, Effect = 50601 },
    new() { UI = 50602, Effect = 50603 },
    new() { UI = 50604, Effect = 50605 },
};

Pool size determines how many holograms can be visible simultaneously. With IsGlobal = true, each pool slot is shared across all players. With IsGlobal = false, each player gets their own allocation.

2. Implement IHologramDisplay

This controls what the player sees when they enter the hologram zone:

using BlueBeard.Holograms;
using SDG.NetTransport;
using SDG.Unturned;

public class ShopHologramDisplay : IHologramDisplay
{
    public void Show(ITransportConnection connection, short key,
        HologramDefinition definition, Dictionary<string, string> metadata)
    {
        EffectManager.sendUIEffectVisibility(key, connection, true, "Canvas/ShopPanel", true);
        EffectManager.sendUIEffectText(key, connection, true, "Canvas/ShopPanel/Title",
            metadata.GetValueOrDefault("title", "Shop"));
    }

    public void Hide(ITransportConnection connection, short key, HologramDefinition definition)
    {
        EffectManager.sendUIEffectVisibility(key, connection, true, "Canvas/ShopPanel", false);
    }
}

3. Create Definitions and Register

var definition = new HologramDefinition
{
    Position = new Vector3(100, 50, 200),
    Radius = 10f,
    Height = 20f,
    Metadata = new Dictionary<string, string>
    {
        { "title", "Weapon Shop" }
    }
};

hologramManager.RegisterDefinition(definition, new ShopHologramDisplay(), pool, isGlobal: true);

Batch Registration

var registration = new HologramRegistration
{
    Display = new ShopHologramDisplay(),
    Holograms = pool,
    Definitions = new List<HologramDefinition> { def1, def2, def3 },
    IsGlobal = true
};

hologramManager.Register(registration);

Updating Holograms

Update One Player

hologramManager.UpdatePlayer(player, definition, new Dictionary<string, string>
{
    { "stock", "42" },
    { "discount", "20%" }
});

Update All Players

hologramManager.UpdateAll(definition, new Dictionary<string, string>
{
    { "stock", "0" },
    { "status", "SOLD OUT" }
});

Events

hologramManager.PlayerEnteredHologram += (player, definition) =>
{
    Logger.Log($"{player.channel.owner.playerID.playerName} entered hologram zone");
};

hologramManager.PlayerExitedHologram += (player, definition) =>
{
    Logger.Log($"{player.channel.owner.playerID.playerName} left hologram zone");
};

Unregistering

hologramManager.UnregisterDefinition(definition);
// Hides UI for all players, clears the effect, destroys the trigger zone

Global vs Per-Player Pools

Mode IsGlobal Behavior
Global true Pool slots are shared. If slot 0 is used by any player, no other player gets slot 0. Good for unique world objects.
Per-Player false Each player gets their own allocation from the pool. Good for instanced content.

Player Filtering

hologramManager.RegisterDefinition(definition, display, pool, isGlobal: false,
    playerFilter: player => player.life.health > 50);
// Only players with >50 health will see this hologram
Product Compatible and additional computed target framework versions.
.NET Framework net481 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-ci.24 82 7/4/2026
0.1.0-ci.23 85 6/25/2026
0.1.0-ci.22 94 5/8/2026
0.1.0-ci.19 72 5/7/2026
0.1.0-ci.18 60 5/7/2026
0.1.0-ci.17 64 5/3/2026
0.1.0-ci.16 78 5/3/2026
0.1.0-ci.15 78 4/13/2026
0.1.0-ci.14 67 4/12/2026
0.1.0-ci.13 67 4/12/2026
0.1.0-ci.12 64 4/12/2026
0.1.0-ci.11 64 4/12/2026
0.1.0-ci.10 78 4/11/2026
0.1.0-ci.9 75 4/7/2026
0.1.0-ci.8 68 4/7/2026
0.1.0-ci.7 73 4/7/2026
0.1.0-ci.6 78 3/14/2026
0.1.0-ci.5 125 2/22/2026