🕺

【Roblox】Character 指定のアバターを使用する

2024/08/23に公開

はじめに

今回はRobloxのゲーム内で指定のアバターを使用する方法をまとめます。

Robloxバージョン:0.638.1.6380615

参考にした記事・サイト

https://create.roblox.com/docs/reference/engine/classes/StarterPlayer#summary

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開発チーム

Discussion