プレイヤーはしばしば、自分が置かれている空間の構築の一部であるように感じることを楽しんでいます。The サーフェスアート 開発者モジュール は、プレイヤーが文字通りエクスペリエンスに自分の印を残すことを可能にする。
モジュール使用法
インストール
エクスペリエンスで サーフェスアート モジュールを使用するには:
ビュータブから、ツールボックスを開き、クリエイターストアタブを選択します。
モデル の順序が選択されていることを確認し、 すべて表示 ボタンをクリックして、 カテゴリ を選択します。
ロケートしてクリックして 開発モジュール タイル。
サーフェスアート モジュールを見つけてクリックするか、3Dビューにドラッグアンドドロップします。
エクスプローラー ウィンドウで、 サーフェスアート モデル全体を ServerScriptService に移動します。エクスペリエンスを実行すると、モジュールは複数のサービスに分配され、実行を開始します。
キャンバスの位置づけ
モジュールには、3D 世界に配置できる 1つの サーフェスキャンバス モデルが付属しています。このモデルは、プレイヤーが表面に芸術を置くために相互作用するものです。
モジュールのメインフォルダの ワークスペース フォルダ内で サーフェスキャンバス メッシュを見つけます。
トップレベルの ワークスペース 階層に移動し、必要な場所に配置します。
テストセッションを公開/実行すると、プレイヤーは ProximityPrompt を介してオブジェクトと対話し、定義された表面にアートを配置できるようになります。
キャンバス面を変更する
フードの下で、モジュールは SurfaceGui を使用して、アートアイテムを表示します。アートが表示される表面を構成するには:
サーフェスキャンバス メッシュを選択。
プロパティ ウィンドウの底部で、デフォルト値の SurfaceCanvasFace 属性を 右 で見つけます。
属性をクリックし、Enum.NormalId を説明する 6つの値の 1つを入力します。
属性値 | 対応するノーマル ID |
---|---|
前方 | Enum.NormalId.Front |
戻る | Enum.NormalId.Back |
右 | Enum.NormalId.Right |
残り | Enum.NormalId.Left |
上 | Enum.NormalId.Top |
下 | Enum.NormalId.Bottom |
カスタムアートアセットの使用
エクスペリエンスのテーマにより一致するために、デフォルトの代わりに自分のカスタムアセットセットを使用できます。これは、configure 関数を介して、Script の中の **** から呼び出されることができます。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local customAssets = {CustomAsset1 = {name = "Custom Asset 1",assetId = "rbxassetid://7322508294",},CustomAsset2 = {name = "Custom Asset 2",assetId = "rbxassetid://7322547665",},}SurfaceArt.configure({assets = customAssets,})
すべてのキャンバスをクリアする
世界のすべてのキャンバスからすべての既存のアートを削除するには、removeAllArt 機能を Script から呼び出します。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
カスタム効果を表示
アートワークが配置されたときに追加の視覚効果を含めたい場合があるかもしれません。このモジュールは、クライアントに接続して自分のロジックを追加できるイベント artChanged を露出します。
本地スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("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 リファレンス
タイプ
表面アートアセット
キャンバスのアートとして使用される画像は、2つの値を持つテーブルで表現されます。
キー | 説明 |
---|---|
name | メタデータ表示名。 |
assetId | 含める画像のアセットID。 |
機能
設定する
環境設定(config: table )
次のキー/値を介してデフォルト設定オプションを上書きして、config テーブルの中の。この機能は Script からのみ呼び出すことができます。
キー | 説明 | デフォルト |
---|---|---|
enabled | モジュールの機能をオンまたはオフに切り替えます。 | 真 |
assets | 表面アートアセット タイプのリスト。 | (以下のコードを参照) |
quotaPerPlayer | 各プレイヤーが配置できるアートピースの最大数。 | 2 |
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.configure({quotaPerPlayer = 4,promptKeyCode = Enum.KeyCode.T,promptMaxActivationDistance = 8,})
カンバスを取得する
getCanvases(): table
SurfaceCanvas タグでタグ付けされたすべてのキャンバスを返します。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
placeアート
プレイヤーの代わりにアートピースをプログラマティックに配置します。サーバーが初期化されると、canvas オブジェクトは SurfaceCanvas タグでタグ付けする必要があります。これは、getCanvases から返されたキャンバスでのみ使用することをお勧めします。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("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()
すべての面からすべてのアートワークを削除します。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
イベント
アート変更
キャンバスの特定の場所でアートワークが変更されたときに発火します。アートワークが削除されると、artId が nil になります。注:Vector3 がイベントハンドラーに第 3 パラメータとして渡され、アートワークが配置される正確な位置に カスタム効果 を配置できるようになります。このイベントは、LocalScript でのみ接続できます。
パラメータ | |
---|---|
キャンバス: BasePart | アートワークを変更したキャンバス。 |
スポット: Frame | 内部の Frame には、アートワークが含まれています ImageLabel . |
スポットポジション: Vector3 | アートワークが配置された正確な位置。 |
artId: string | 新しいアートワークのアセットID。 |
所有者ユーザーID: number | UserId アートを配置したプレイヤーの |
本地スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.artChanged:Connect(function(canvas, spot, spotPosition, artId, ownerId)
print("Art placed at:", spotPosition)
print("Art asset ID:", artId)
print("Art placed by:", ownerId)
end)
promptショーン
キャンバスのインタラクションプロンプトがプレイヤーに表示されると、発火します。接続された関数は、プロンプトが表示されているキャンバスを受け取ります。このイベントは、LocalScript でのみ接続できます。
パラメータ | |
---|---|
キャンバス: BasePart | プロンプトが表示されているキャンバス。 |
本地スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.promptShown:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)
promptHidden
キャンバスのインタラクションプロンプトが非表示になったときに発火します。接続された関数は、プロンプトが表示されたキャンバスを受け取ります。このイベントは、LocalScript でのみ接続できます。
パラメータ | |
---|---|
キャンバス: BasePart | プロンプトが表示されたキャンバス。 |
本地スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.promptClosed:Connect(function(canvas)
print(Players.LocalPlayer, canvas)
end)
選択器Shown
サーフェスアートセレクター UI がプレイヤーに表示されると、炎が発生します。このイベントは LocalScript でのみ接続できます。
本地スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.selectorShown:Connect(function()
print(Players.LocalPlayer, "opened surface art selector")
end)
選択詳細非表示Hidden
プレイヤーのために表面アートセレクター UI が非表示になったときに発火します。このイベントは LocalScript でのみ接続できます。
本地スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))
SurfaceArt.selectorHidden:Connect(function()
print(Players.LocalPlayer, "closed surface art selector")
end)