【Roblox】Collision Groups でキャラクターどうしが衝突しないようにする
はじめに
こんにちは、まつさこ です。
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 でキャラクター同士が衝突しないようにする方法を紹介しました。作成するエクスペリエンスの性質によっては、キャラクターどうしが衝突しない方が快適にプレイできる場合があるので、ぜひ活用してみてください。
読んでくださりありがとうございました🤗
Discussion