🚧

【Roblox】Collision Groups でキャラクターどうしが衝突しないようにする

2024/05/13に公開

はじめに

こんにちは、まつさこ です。

Roblox Studio でゲームを開発する際、キャラクター同士が衝突しないようにする方法を紹介します。Roblox では、Collision Groups という機能を使って、特定のグループ同士が衝突しないように設定することができます。

公式のドキュメントにも "Disabling Character Collisions" として紹介されているので、こちらも参考にしてください。

Collision Groups とは

Collision Groups は、特定のグループ同士が衝突しないように設定することができる機能です。例えば、プレイヤーキャラクター同士が衝突しないようにしたい場合や、特定のオブジェクト同士が衝突しないようにしたい場合に使用します。


Roblox公式Guidesより引用

Roblox Studio では Model タブから新しい Collision Group を作成することができます。ここで Collision Group どうしの衝突を無効/有効にする設定を行います。

オブジェクトの CollisionGroupId プロパティを設定することで、そのオブジェクトが所属する Collision Group を指定することができます。

Roblox公式Guidesより引用

▼ Collision Group について詳細はこちら

キャラクター同士が衝突しないようにする

キャラクター同士が衝突しないようにするには、それぞれのキャラクターに Collision Group を設定します。

以下のスクリプトは、プレイヤーキャラクターが追加されたときに、そのキャラクターのすべてのパーツに Collision Group を設定する方法です。PhysicsService を使って Collision Group を登録して衝突可否を設定し、キャラクターのパーツに Collision Group を設定します。

このスクリプトは、サーバースクリプトとして ServerScriptService などに配置します。

local PhysicsService = game:GetService("PhysicsService")
local Players = game:GetService("Players")

-- "Characters" という Collision Group を登録し、Characters同士の衝突を無効にする
PhysicsService:RegisterCollisionGroup("Characters")
PhysicsService:CollisionGroupSetCollidable("Characters", "Characters", false)

local function onDescendantAdded(descendant)
	-- パーツに Collision Group を設定
	if descendant:IsA("BasePart") then
		descendant.CollisionGroup = "Characters"
	end
end

local function onCharacterAdded(character)
	-- キャラクターのすべてのパーツに Collision Group を設定
	for _, descendant in character:GetDescendants() do
		onDescendantAdded(descendant)
	end
	character.DescendantAdded:Connect(onDescendantAdded)
end

Players.PlayerAdded:Connect(function(player)
	-- プレイヤーキャラクターが追加されたときに、Collision Group を設定
	player.CharacterAdded:Connect(onCharacterAdded)
end)

このスクリプトを実行すると、プレイヤーキャラクター同士が衝突しないようになります。

まとめ

この記事では、Roblox Studio でキャラクター同士が衝突しないようにする方法を紹介しました。作成するエクスペリエンスの性質によっては、キャラクターどうしが衝突しない方が快適にプレイできる場合があるので、ぜひ活用してみてください。

読んでくださりありがとうございました🤗

moze テックブログ

Discussion