【Roblox】Character 指定のアバターを使用する
はじめに
今回はRobloxのゲーム内で指定のアバターを使用する方法をまとめます。
Robloxバージョン:0.638.1.6380615
参考にした記事・サイト
StarterCharacter
デフォルトでは各々が設定したアバターをCharacterとしてゲームで使用します。
個人で自由に設定できるので、動物などの人の原型をとどめていないアバターを使用することもできます。
ゲームによっては指定のアバターをCharacterとしてゲームをプレイさせたい場合があります。
その場合はStarterPlayerフォルダの中にStarterCharacterと名付けたモデルインスタンスを設定します。
こうすることでStarterCharacterがPlayerのCharacterインスタンスとして機能します。
StarterPlayerフォルダの内にStarterCharacterを配置
例:ブロック型のアバターを使用
またStarterCharacterと同様にHumanoidもStarterHumanoidとして設定することができます。
追加の対応
自分が担当したゲームでは、ブロック型のアバターを使用しつつ、肌と髪の毛のアクセサリーのみを反映し、ゲーム独自の装備を着用させる対応を行いました。
下記は髪の毛のみの抽出と肌の色を設定する処理の例です。
-- 髪の毛を反映する処理
local function setPlayerOriginAccessory(humanoid:Humanoid, userId:number)
-- アクセサリー取得
local humanoidDescription = game.Players:GetHumanoidDescriptionFromUserId(userId)
local accessories = humanoidDescription:GetAccessories(true)
-- 髪の毛のみ抽出
local hairAccessories = {}
for i = 1, #accessories do
if accessories[i].AccessoryType == Enum.AccessoryType.Hair then
table.insert(hairAccessories, accessories[i])
end
end
-- 今のHumanoidに設定する
local newDescription = humanoid:GetAppliedDescription()
newDescription:SetAccessories(hairAccessories, true)
humanoid:ApplyDescription(newDescription, Enum.AssetTypeVerification.Default)
end
-- PlayerのRobloxサイト上の身体の色を設定する
local function setPlayerOriginBodyColors(character, body3Colors)
local BodyColors = character:FindFirstChildWhichIsA("BodyColors")
if not BodyColors then
BodyColors = Instance.new(BodyColors, character)
end
BodyColors.HeadColor = BrickColor.new(body3Colors.headColor3)
BodyColors.LeftArmColor = BrickColor.new(body3Colors.leftArmColor3)
BodyColors.LeftLegColor = BrickColor.new(body3Colors.leftLegColor3)
BodyColors.RightArmColor = BrickColor.new(body3Colors.rightArmColor3)
BodyColors.RightLegColor = BrickColor.new(body3Colors.rightLegColor3)
BodyColors.TorsoColor = BrickColor.new(body3Colors.torsoColor3)
end
-- Playerが追加された際に呼ばれる
game:GetService("Players").PlayerAdded:Connect(function(player:Player)
local appearanceInfo = game.Players:GetCharacterAppearanceInfoAsync(player.UserId)
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
-- デフォルトアクセサリー設定
setPlayerOriginAccessory(humanoid, player.UserId)
-- デフォルト肌色変更
setPlayerOriginBodyColors(character, appearanceInfo.bodyColor3s)
end)
解説
local appearanceInfo = game.Players:GetCharacterAppearanceInfoAsync(player.UserId)
上記はRoblox Web サイトのプレイヤーのアバターの情報を辞書として持ってくることができます。
asset:装備されているアセット(帽子、体の部分など)
bodyColors:各肢のBrickColor値
bodyColor3s:各肢のColor3インスタンス(bodyColorsと完全に一致しない可能性がある)
defaultPantsApplied:デフォルトのパンツが適応されているかどうか
defaultShirtApplied:デフォルトのシャツが適応されているかどうか
emotes:装備されているエモート
playerAvatarType:PlayerのアバタータイプがR15かR6か
scale:さまざまなボディスケーリングファクター
これを使用してCharacterの肌の色を設定しています。
肌の色を変更する場合はBodyColorsインスタンスを使用することで変更できます。
まとめ
-
StarterPlayerの中にStarterCharacterまたはStarterHumanoidを設定することで、ゲームで使用するCharacterを設定することができる。
-
game.Players:GetCharacterAppearanceInfoAsyncを使用することでRobloxのWebサイト上の設定をもってくることができ、肌の色や設定されたアクセサリーなどを取得可能。
多くの種類のアバターで遊べるのがRobloxの強みですが、ゲームによってアバターを指定したい場合はぜひ活用してください!!
当社ではRobloxを活用したゲームの開発、 また企業の商品やサービスの認知度拡大に寄与する3Dワールドの制作など、 Robloxにおける様々な活用支援を行っております。 Robloxのコンテンツ開発をご検討されている企業様は、お気軽にご相談ください。 landho.co.jp/
Discussion