サーフェスアート

*このコンテンツは、ベータ版の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つの値のいずれかを入力します。

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

体験のテーマによりよくフィットさせるために、デフォルトの代わりに独自のカスタムアセットのセットを使用することができます。これは、ServerScriptServiceScriptから呼び出される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)

以下のキー/値を使用してデフォルトの設定オプションを上書きします。この関数は、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は、米国並びにその他の国における登録商標および非登録商標です。