如何避免Godot多人FPS游戏中渲染额外枪支?
多人FPS游戏枪支渲染与穿墙问题(Godot 4)
我正在开发一款普通的多人FPS游戏,为解决玩家枪支穿墙的问题,我采用了第二个Camera3D加SubViewport的方案。两台相机的剔除掩码配置在没有其他玩家连接时完全正常,但一旦有玩家连入主机,所有玩家的屏幕上都会渲染出额外的枪支——显然是因为新玩家实例化后场景里多了视口,导致渲染内容叠加。如果移除整个SubViewportContainer,枪支不会再错误渲染,但会出现在其他玩家手中,同时穿墙问题又回来了。
世界连接逻辑脚本
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)
我试过在新玩家实例化时修改手枪模型网格的VisualInstance3D图层,但完全没用——所有玩家枪支的VisualInstance3D图层都是相同的,而且这个模型拆分了多个网格,代码写得特别繁琐:
func add_player(peer_id): var player = Player.instantiate() var glock_body = player.get_node("Camera/Camera3D/toy_glock_lowpoly_w_bevel/glock_body") var glock_slide = player.get_node("Camera/Camera3D/toy_glock_lowpoly_w_bevel/glock_slide") var glock_barrel = player.get_node("Camera/Camera3D/toy_glock_lowpoly_w_bevel/glock_barrel") var glock_trigger = player.get_node("Camera/Camera3D/toy_glock_lowpoly_w_bevel/glock_trigger") var glock_magazine = player.get_node("Camera/Camera3D/toy_glock_lowpoly_w_bevel/glock_magazine") var glock_ammo_shell = player.get_node("Camera/Camera3D/toy_glock_lowpoly_w_bevel/glock_ammo_shell") glock_body.set_layer_mask(3) glock_slide.set_layer_mask(3) glock_barrel.set_layer_mask(3) glock_trigger.set_layer_mask(3) glock_magazine.set_layer_mask(3) glock_ammo_shell.set_layer_mask(3) player.name = str(peer_id) add_child(player)
这应该是个常见问题,但我找了一圈没找到Godot 4的解决方案。
内容的提问来源于stack exchange,提问作者heywannafunk
相关产品推荐
相关产品推荐

