How not to render extra guns in Godot multiplayer FPS?
Asked Answered
A

1

0

I'm trying to make an ordinary multiplayer FPS. I use a second Camera3D and a SubViewport to avoid player's gun clipping into the wall:

Both cameras' cull masks set up the way that everything works fine until the other player hasn't connected.

As another player connects to a host, every player get an extra gun rendered on their screen:

Apparently it's happening because every new connection instantiates a new player, hence there's another viewport in the world which adds up everything it has to render to players' screens. Also if I remove the whole SubViewportContainer, guns don't render in the wrong places anymore, only in other players' hands, but now they're clipping into the walls.

Here's my world script that handles connections:

extends Node

@onready var main_menu = $CanvasLayer/Menu
@onready var address_entry = $CanvasLayer/Menu/MarginContainer/VBoxContainer/AddressEntry

const Player = preload("res://scenes/Player.tscn")
const PORT = 8899
var enet_peer = ENetMultiplayerPeer.new()

func _unhandled_input(event):
	if Input.is_action_just_pressed("exit"):
		get_tree().quit()


func _on_host_pressed():
	main_menu.hide()
	
	enet_peer.create_server(PORT)
	multiplayer.multiplayer_peer = enet_peer
	multiplayer.peer_connected.connect(add_player)
	
	add_player(multiplayer.get_unique_id())


func _on_join_pressed():
	main_menu.hide()
	
	enet_peer.create_client(address_entry.text, PORT)
	multiplayer.multiplayer_peer = enet_peer


func add_player(peer_id):
	var player = Player.instantiate()
	player.name = str(peer_id)
	add_child(player)

This seems like a common task but still I couldn't manage to find any Godot 4 solution on the Internet. I will be grateful if you share any advice on how to render only player's gun on their screen and still avoid gun clipping.

The Godot project i'm working on is based on DevLogLogan's Online Multiplayer FPS From Scratch tutorial:

Alphosis answered 5/6, 2023 at 14:36 Comment(0)
I
0

You should have a check happening on the current client for movement and such yes? Well when anything is not happening for the client you can then hide the gun model itself and then the gun models on the other players should hide correctly as they are on different clients, it's possibly because the guns are children and being synchronised across all clients by default.

Impressionism answered 5/6, 2023 at 17:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.