Files
Northbound/TROUBLESHOOTING_GHOST.md

6.3 KiB

Building Ghost Preview Troubleshooting

FIXED: Preview Activated But Not Visible

If console shows "Preview activated" but you can't see it, this was a material/transparency issue.

Solution implemented:

  • Better material creation supporting both URP and Standard RP
  • Proper transparency setup for ghost materials
  • Multiple material slots handled correctly
  • Auto-creates debug cube if prefab has no renderer

Test the fix:

  1. Press Play
  2. Press B to enter build mode
  3. Move mouse over ground
  4. You should now see a green transparent ghost of your building
  5. Invalid positions show red transparent ghost

If still not visible after update, continue with checklist below.


Quick Checklist

Run through these checks in order:

1. Check Console Logs

Press B to enter build mode and look for these messages:

  • "Entered Build Mode"
  • "[BuildingPlacement] Created preview: BuildingPreview"
  • "[BuildingPlacement] Found X renderers"
  • "[BuildingPlacement] Applied valid material to preview"
  • "[BuildingPlacement] Preview activated at (x, y, z)"

If you see errors:

  • "BuildingManager.Instance is null" → Go to Step 2
  • "No buildings available" → Go to Step 3
  • "Prefab is null" → Go to Step 4
  • "Preview deactivated - no ground hit" → Go to Step 5

2. Check BuildingManager Setup

  1. In Hierarchy, find "BuildingManager" GameObject
  2. Verify it has:
    • BuildingManager component
    • NetworkObject component
  3. In BuildingManager component:
    • Grid Size: Should be > 0 (e.g., 1)
    • Ground Layer: Should be set (e.g., "Default" or "Ground")
    • Available Buildings: Should have at least 1 BuildingData

Fix: If BuildingManager doesn't exist, create it:

  • Create Empty GameObject → Name: "BuildingManager"
  • Add Component → BuildingManager
  • Add Component → NetworkObject
  • Configure settings

3. Check BuildingData Asset

  1. Project window → Find your BuildingData asset
  2. Select it and check Inspector:
    • Building Name: Should have a name
    • Prefab: Should be assigned (not "None")
    • Width/Length/Height: Should be > 0
  3. Verify this BuildingData is in BuildingManager's "Available Buildings" list

Fix: If BuildingData missing:

  • Right-click in Project → Create → Northbound → Building Data
  • Assign a prefab
  • Add to BuildingManager's Available Buildings list

4. Check Building Prefab

  1. Find your building prefab in Project
  2. Open it and verify:
    • Has a MeshRenderer or SkinnedMeshRenderer component
    • Renderer has a Material assigned
    • Has a Collider (for placement validation)
    • Optionally has NetworkObject (will be removed from preview)

Fix: If prefab is missing components:

  • Add a 3D object (Cube, for testing)
  • Save as prefab
  • Assign to BuildingData

5. Check Ground Layer

The preview won't show if the raycast can't hit the ground.

  1. In Scene view, select your terrain/ground
  2. Check its Layer (top of Inspector)
  3. In BuildingManager:
    • Ground Layer mask should include this layer
  4. In BuildingPlacement (on Player):
    • Ground Layer mask should match BuildingManager

Fix:

  • Set terrain Layer to "Default" or create "Ground" layer
  • In BuildingManager/BuildingPlacement → Ground Layer → Check "Default" (or your ground layer)

6. Check Camera

  1. Verify Camera.main exists in scene
  2. Camera should be able to see the ground

Fix:

  • Make sure Main Camera has tag "MainCamera"
  • Camera should be positioned to see the scene

7. Check Player Setup

  1. Find your Player prefab
  2. Verify it has:
    • BuildingPlacement component
    • Ground Layer is set
    • Max Placement Distance > 0 (e.g., 100)

8. Visual Check in Scene View

  1. Press B to enter build mode
  2. Open Hierarchy window
  3. Look for object named "BuildingPreview"
  4. If it exists:
    • Click on it
    • Check if it's active (checkbox next to name)
    • Look at its position in Inspector
    • Switch to Scene view and look for it
    • Check if materials are assigned in Renderer component

9. Test with Simple Cube

Create a minimal test setup:

  1. Create a Cube in scene → Save as Prefab → Delete from scene
  2. Create BuildingData → Assign Cube prefab
  3. Add to BuildingManager → Available Buildings
  4. Create a Plane → Position at (0, 0, 0)
  5. Press Play → Press B → Move mouse over Plane

You should see the transparent cube preview.

Common Issues

Preview exists but is invisible

Cause: Materials not rendering or transparent issues Fix (Now Automated):

  • The system now auto-detects your render pipeline (URP or Standard)
  • Creates proper transparent materials automatically
  • If prefab has no renderer, adds a debug cube

Manual Test:

  1. Add GhostMaterialTest component to any object with a renderer
  2. Press Play
  3. Object should become transparent green
  4. If it works, the ghost system will work too

Preview doesn't follow mouse

Cause: Ground layer not set correctly or no ground detected Fix:

  • Check console for "no ground hit" message
  • Verify Ground Layer includes your terrain
  • Increase Max Placement Distance
  • Make sure you're pointing at ground, not sky

Preview spawns at (0,0,0) and doesn't move

Cause: Raycast not hitting ground Fix:

  • Same as above - Ground Layer issue

Materials are black/pink

Cause: Shader/material issues Fix:

  • Make sure you're using the correct render pipeline shaders
  • Standard RP: Use "Standard" shader
  • URP: Use "Universal Render Pipeline/Lit" shader

Debug Commands

Add these temporary debug lines to check:

In CreatePreview() after instantiation:

Debug.Log($"Preview position: {previewObject.transform.position}");
Debug.Log($"Preview active: {previewObject.activeSelf}");
Debug.Log($"Renderers: {previewRenderers.Length}");

In UpdatePreviewPosition():

Debug.DrawRay(ray.origin, ray.direction * maxPlacementDistance, Color.red);

This shows the raycast in Scene view (red line from camera to mouse).

Still Not Working?

Check these final items:

  1. Input Actions are set up (ToggleBuildMode, Rotate, Build)
  2. BuildingManager is spawned on network (in scene, not prefab)
  3. You're the owner of the player (IsOwner = true)
  4. No errors in Console
  5. Build mode is actually active (check console for "Entered Build Mode")

If all else fails, check the Console for any errors and share them!