Football

Como Desativar a Colisão do Jogador.

Compartilhar:

Este é um tutorial rápido, simples e fácil de acompanhar sobre como permitir que os jogadores andem através uns dos outros, evitando colisões entre personagens e reduzindo ao máximo a ocorrência de bugs. A ideia é configurar o comportamento dos personagens para que eles não fiquem presos, empurrando uns aos outros ou bloqueando passagens estreitas durante o jogo. Seguindo os passos corretamente, você poderá melhorar a fluidez da movimentação, deixar a experiência mais confortável para todos os jogadores e manter o sistema funcionando de forma estável, com o mínimo possível de problemas inesperados. Para aprender mais sobre criação de games você pode acessar: https://www.metablox.com.br.

Comece indo até a aba Model no Roblox Studio e clique em “Collision Groups”.
image

Uma vez lá, dependendo da sua versão, você deve ver uma tela como esta.
image

No topo, clique em “Add Group”.
image

Digite o nome — recomendo usar **“Player Part”** — e pressione **Enter** para confirmar.

Depois de fazer isso, um novo Collision Group deve aparecer ao lado. Clique nele e você deve ver esta tela.
image

 Certifique-se de desativar a opção “PlayerPart” em “PlayerPart” para que não colida com off.
image

Agora eu terei 2 tutoriais separados para facilitar o entendimento e ajudar você a seguir o processo correto de acordo com o tipo de personagem que estiver usando. O primeiro tutorial será voltado para quem está usando o personagem padrão, ou seja, aquele personagem que já vem configurado originalmente e não possui alterações personalizadas. Já o segundo tutorial será destinado a quem está usando um personagem personalizado, com aparência, modelo ou configurações diferentes do padrão. Dessa forma, você poderá escolher o tutorial que melhor se encaixa no seu caso e seguir as instruções com mais clareza, evitando confusões durante o processo. Se você estiver usando o personagem padrão, continue acompanhando a primeira parte. Caso esteja usando um personagem personalizado, você poderá pular para a segunda parte quando ela começar. **Personagem Padrão**

Vá até ServerScriptService e crie um novo script.
image
Nomeie como quiser, eu vou nomeá-lo de PlayerCollide.

Em seguida, precisamos codificá-lo. Para fazer isso, precisamos começar definindo o PlayerService.

local PlayerService = game:GetService("Players") --Definir o Player Service

Depois disso, vamos verificar quando um jogador entra e fazer uma função a partir disso.

local PlayerService = game:GetService("Players") --Definir PlayerService

PlayerService.PlayerAdded:Connect(function(player) --Criar uma variável para o jogador
	--Todo: definir a colisão do jogador
end)

Agora vamos obter o personagem do jogador e criar uma variável para ele.

local PlayerService = game:GetService("Players") --Definir PlayerService

PlayerService.PlayerAdded:Connect(function(player)--Criar uma variável para o jogador
	local Character = player.Character or player.CharacterAdded:Wait() --Também adicionamos o CharacterAdded:Wait() para garantir que o script obtenha o personagem.
end)

Agora, vamos usar um loop for i para obter todas as partes do personagem que podem colidir, e faremos assim:

local PlayerService = game:GetService("Players") --Definir PlayerService

PlayerService.PlayerAdded:Connect(function(player)--Criar uma variável para o jogador
	local Character = player.Character or player.CharacterAdded:Wait() --Também adicionamos o CharacterAdded:Wait() para garantir que o script obtenha o personagem.
	
	for _, child in pairs(Character:GetDescendants()) do
		--Todo: Verificar se a parte precisa do grupo de colisão.
	end
end)

Agora, precisamos verificar se o filho encontrado dentro do personagem é um Basepart. Fazemos isso usando uma declaração if com :IsA() para verificar se é um Basepart.

local PlayerService = game:GetService("Players") --Definir PlayerService

PlayerService.PlayerAdded:Connect(function(player)--Criar uma variável para o jogador
	local Character = player.Character or player.CharacterAdded:Wait() --Também adicionamos o CharacterAdded:Wait() para garantir que o script obtenha o personagem.
	
	for _, child in pairs(Character:GetDescendants()) do
		if child:IsA("BasePart") then
			--Todo: Definir grupo de colisão.
		end
	end
end)

Agora que verificamos que o filho pode colidir, precisamos definir seu grupo de colisão, o que é bastante simples. Usaremos child.CollisionGroup.

local PlayerService = game:GetService("Players") --Definir PlayerService

PlayerService.PlayerAdded:Connect(function(player)--Criar uma variável para o jogador
	local Character = player.Character or player.CharacterAdded:Wait() --Também adicionamos o CharacterAdded:Wait() para garantir que o script obtenha o personagem.

	for _, child in pairs(Character:GetDescendants()) do
		if child:IsA("BasePart") then --Verifica se o filho é um basepart
			child.CollisionGroup = "PlayerPart" --Defina "PlayerPart" como o nome do seu grupo de colisão.
		end
	end
end)

E agora está feito! A configuração foi concluída com sucesso. A partir deste ponto, seu jogador não deve mais colidir com outros jogadores dentro da experiência, evitando empurrões, bloqueios inesperados ou interferências durante a movimentação. Ao mesmo tempo, ele continuará funcionando normalmente com as outras partes do ambiente, mantendo a interação correta com plataformas, objetos, obstáculos e demais elementos físicos do jogo. Isso significa que o comportamento do personagem ficará mais consistente e adequado, especialmente em experiências com vários jogadores ao mesmo tempo. Cada jogador poderá se movimentar com mais liberdade, sem atrapalhar o caminho dos demais, enquanto ainda respeita as colisões importantes do cenário. Essa configuração é bastante útil para melhorar a jogabilidade, deixar a experiência mais fluida e evitar problemas comuns em mapas com espaços apertados ou muitos personagens próximos. Com tudo ajustado, seu **Personagem Personalizado** estará pronto para ser usado de forma mais eficiente, oferecendo uma movimentação mais limpa, organizada e compatível com o restante das partes do jogo.

Este é bem simples. Você pode ir até seu personagem personalizado em StarterPlayer (ou onde quer que esteja) e apenas adicionar o grupo de colisão individualmente. Se você não quiser fazer isso manualmente, então este é o script do tutorial do personagem padrão, ele deve funcionar bem na maior parte.

local PlayerService = game:GetService("Players") --Definir PlayerService

PlayerService.PlayerAdded:Connect(function(player)--Criar uma variável para o jogador
	local Character = player.Character or player.CharacterAdded:Wait() --Também adicionamos o CharacterAdded:Wait() para garantir que o script obtenha o personagem.

	for _, child in pairs(Character:GetDescendants()) do
		if child:IsA("BasePart") then --Verifica se o filho é um basepart
			child.CollisionGroup = "PlayerPart" --Defina "PlayerPart" como o nome do seu grupo de colisão.
		end
	end
end)

local PlayerService = game:GetService("Players")
PlayerService.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		for _, child in pairs(character:GetDescendants()) do
			if child:IsA("BasePart") then
				child.CollisionGroup = "PlayerPart"
			end
		end
	end)
end)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *