サーフェスアート

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

プレイヤーは、自分がいる空間を構築する一部であると感じることを楽しむことがよくあります。SurfaceArt 開発者モジュールは、プレイヤーがゲーム内で文字通り自分の痕跡を残すことを可能にします。

モジュールの使用法

インストール

ゲームでSurfaceArtモジュールを使用するには:

  1. スタジオのウィンドウメニューまたはホームタブツールバーから、ツールボックスを開き、クリエイターストアタブを選択します。

  2. モデルのソートが選択されていることを確認し、カテゴリすべて表示ボタンをクリックします。

  3. パッケージタイルを見つけてクリックします。

  4. サーフェスアートモジュールを見つけてクリックするか、3Dビューにドラッグアンドドロップします。

  5. エクスプローラーウィンドウで、SurfaceArtモデル全体をReplicatedStorageに移動します。ゲームを実行すると、モジュールが実行を開始します。

キャンバスの配置

このモジュールには、3Dワールドに配置できる1つのSurfaceCanvasモデルが付属しています。このモデルは、プレイヤーがその表面にアートを配置するために対話するものです。

  1. モジュールのメインフォルダー内のWorkspaceフォルダーにあるSurfaceCanvasメッシュを見つけます。

  2. それをトップレベルのWorkspace階層に移動し、希望の位置に配置します。

  3. 公開/テストセッションを実行すると、プレイヤーはProximityPromptを介してオブジェクトと対話し、定義された表面にアートを配置できるようになります。

キャンバスの面を変更する

内部では、このモジュールはアートアイテムを表示するためにSurfaceGuiを使用しています。アートが表示される面を設定するには:

  1. SurfaceCanvasメッシュを選択します。

  2. プロパティウィンドウの下部で、デフォルト値がSurfaceCanvasFace属性を見つけます。

  3. 属性をクリックし、Enum.NormalIdを説明する6つの値のいずれかを入力します。

カスタムアートアセットの使用

ゲームのテーマにより適合させるために、デフォルトの代わりに独自のカスタムアセットセットを使用することができます。これは、ServerScriptService内のScriptから呼び出されるconfigure関数を介して行うことができます。

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local customAssets = {
CustomAsset1 = {
name = "カスタムアセット1",
assetId = "rbxassetid://7322508294",
},
CustomAsset2 = {
name = "カスタムアセット2",
assetId = "rbxassetid://7322547665",
},
}
SurfaceArt.configure({
assets = customAssets,
})

すべてのキャンバスをクリアする

世界のすべてのキャンバスから既存のアートを削除するには、ScriptからremoveAllArt関数を呼び出します。

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

カスタムエフェクトの表示

アートワークが配置されたときに追加の視覚効果を含めたい場合があります。このモジュールは、クライアントで接続できるartChangedというイベントを公開しており、独自のロジックを追加できます。

LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local function createParticleEmitter(canvas, position)
local attachment = Instance.new("Attachment")
attachment.Position = canvas.CFrame:PointToObjectSpace(position)
attachment.Axis = Vector3.new(0, 0, 1)
attachment.SecondaryAxis = Vector3.new(1, 0, 0)
attachment.Parent = canvas
local particleEmitter = Instance.new("ParticleEmitter")
particleEmitter.Speed = NumberRange.new(50)
particleEmitter.Rate = 50
particleEmitter.Color = ColorSequence.new(Color3.fromRGB(128, 254, 7))
particleEmitter.SpreadAngle = Vector2.new(35, 35)
particleEmitter.Parent = attachment
return attachment
end
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
if artId then
-- 3秒間スパークルを表示
task.spawn(function()
local emitterAttachment = createParticleEmitter(canvas, spotPosition)
task.wait(3)
emitterAttachment:Destroy()
end)
end
end)

APIリファレンス

タイプ

SurfaceArtAsset

キャンバス用のアートとして使用される画像は、2つの値を持つテーブルで表されます。

キー説明
nameメタデータ表示名。
assetId含める画像のアセットID。

関数

configure

configure(config: table)

configテーブル内の次のキー/値を介してデフォルトの構成オプションをオーバーライドします。この関数はScriptからのみ呼び出すことができます。

キー説明デフォルト
enabledモジュールの機能をオンまたはオフに切り替えます。true
assetsSurfaceArtAssetタイプのリスト。(下記のコード参照)
quotaPerPlayer各プレイヤーが配置できるアート作品の最大数。2
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.configure({
quotaPerPlayer = 4,
promptKeyCode = Enum.KeyCode.T,
promptMaxActivationDistance = 8,
})

getCanvases

getCanvases(): table

SurfaceCanvasタグが付けられたすべてのキャンバスを返します。

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local canvases = SurfaceArt.getCanvases()

placeArt

placeArt(player: Player, canvas: BasePart)

プレイヤーの代理としてアート作品をプログラム的に配置します。canvasオブジェクトは、サーバーが初期化されるときにSurfaceCanvasタグが付けられている必要があります。これは、getCanvasesから返されたキャンバスでのみ使用することをお勧めします。

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
local remoteEvent = ReplicatedStorage:WaitForChild("SurfaceArtRemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
-- デフォルトのアートアセットからBloxy Awardを最初のキャンバスに配置
local canvases = SurfaceArt.getCanvases()
SurfaceArt.placeArt(player, canvases[1], "BloxyAward")
end)

removeAllArt

removeAllArt()

すべてのサーフェスからすべてのアートワークを削除します。

Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.removeAllArt()

イベント

artChanged

キャンバスの特定の位置でアートワークが変更されたときに発火します。アートワークが削除されると、artIdnilになります。イベントハンドラーには、アートワークが配置された正確な位置にカスタムエフェクトを配置できるように、Vector3値が3番目のパラメータとして渡されます。このイベントはLocalScript内でのみ接続できます。

パラメータ
canvas: BasePartアートワークが変更されたキャンバス。
spot: FrameアートワークImageLabelを含む内部Frame
spotPosition: Vector3アートワークが配置された正確な位置。
artId: string新しいアートワークのアセットID。
ownerUserId: numberアートを配置したプレイヤーのUserId
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("アートが配置された位置:", spotPosition)
print("アートアセットID:", artId)
print("アートを配置したのは:", ownerId)
end)

promptShown

キャンバスのインタラクションプロンプトがプレイヤーに表示されたときに発火します。接続された関数は、プロンプトが表示されているキャンバスを受け取ります。このイベントはLocalScript内でのみ接続できます。

パラメータ
canvas: BasePartプロンプトが表示されているキャンバス。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.promptShown:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)

promptHidden

キャンバスのインタラクションプロンプトが非表示になったときに発火します。接続された関数は、プロンプトが表示されていたキャンバスを受け取ります。このイベントはLocalScript内でのみ接続できます。

パラメータ
canvas: BasePartプロンプトが表示されていたキャンバス。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.promptClosed:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)

selectorShown

サーフェスアートセレクターUIがプレイヤーに表示されたときに発火します。このイベントはLocalScript内でのみ接続できます。

LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "サーフェスアートセレクターを開いた")
end)

selectorHidden

サーフェスアートセレクターUIがプレイヤーに非表示になったときに発火します。このイベントはLocalScript内でのみ接続できます。

LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage.SurfaceArt)
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "サーフェスアートセレクターを閉じた")
end)
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。