プレイヤーは、スペースに入っているかのように感じることがよくあります。 サーフェスアート 開発者モジュール は、プレイヤーが体験でマークを文字通り残します。
モジュール使用
インストール
エクスペリエンスで サーフェスアート モジュールを使用するには:
モデル ソートが選択されていることを確認してから、 すべてを表示 ボタンをクリックして、 カテゴリ のための 1>ボタン1> をクリックします。
デバッグモジュール タイルを見つけてクリックします。
表面アート モジュールを見つけ、クリックするか、3D ビューにドラッグアンドドロップします。
In the エクスプローラー ウィンドウ, move the entire サーフェスアート model into ServerScriptService . エクスペリエンスを実行すると、モジュールはさまざまなサービスに分配され、実行を開始します。
キャンバスの位置に配置する
モジュールには、3D 世界に配置するための 1つの サーフェスキャンバス モデルが含まれています。このモデルは、プレイヤーがアートをその表面に配置するためにインタラクトするものです。
モジュールのメインフォルダの ワークスペース フォルダ内の SurfaceCanvas メッシュを見つけます。
移動する トップレベルの ワークスペース 階層に、それを必要な場所に配置する。
テストセッションを公開/実行すると、プレイヤーは ProximityPrompt を介してオブジェクトにインタラクトし、定義された表面にアートを配置できます。
キャンバスの顔を変更する
フードの下で、モジュールは SurfaceGui を使用してアートアイテムを表示します。アートが表示される表面を構成するには:
Select the サーフェスキャンバス メッシュ。
プロパティウィンドウの下部で、サーフェスキャンバスフェイス 属性をデフォルトの値である 右 で見つけます。
属性をクリックし、Enum.NormalId を記述する 6つの値の 1 つを入力します。
アトリビュート値 | 対応するノーマルID |
---|---|
フロント | Enum.NormalId.Front |
戻る | Enum.NormalId.Back |
右 | Enum.NormalId.Right |
左 | Enum.NormalId.Left |
トップ | Enum.NormalId.Top |
下部 / 上部 | Enum.NormalId.Bottom |
カスタムアートアセットを使用する
エクスペリエンスのテーマに合うように、デフォルトではなく、自分のカスタムアセットを使用することができます。これは、Class.Script から呼び出された Script の 2> Class.Script2> 関数を通じて行うことができます。
スクリプト
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,})
すべてのキャンバスをクリアする
世界のすべてのキャンバスからすべての既存のアートを削除するには、 すべてのアートを削除 関数を 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。 |
機能
環境設定
concept テーブルの次のキー/値を通じて、デフォルトの設定オプションをオーバーライドします。この関数は 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
タグが SurfaceCanvas タグでマークされたすべてのキャンバスを返します。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))local canvases = SurfaceArt.getCanvases()
placeArt
プレイヤーの代わりにアートピースプログラムをプログマティックに配置します。注:サーバーが初期化されると、canvas オブジェクトにタグが付けられます。これは、SurfaceCanvas から返されたカンバスのみに適用されます。これを使用するには、canvas オブジェクトを返す必要があります。
スクリプト
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)
すべてのアートを削除
すべての表面からすべてのアートワークを削除します。
スクリプト
local ReplicatedStorage = game:GetService("ReplicatedStorage")local SurfaceArt = require(ReplicatedStorage:WaitForChild("SurfaceArt"))SurfaceArt.removeAllArt()
イベント
artChanged
キャンバスの特定の場所においてアートワークが変更されると、 artId は nil になります。 Vector3 の値はイベントハンドラーにパスされ、アートワークを正確に配置するために、
パラメータ | |
---|---|
キャンバス: 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)
プロンプトが表示されます
プレイヤーにカンバスのインタラクションプロンプトが表示されると、接続された関数はカンバスを受信します。このイベントは、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)
ヒントを非表示
キャンバスの交流プロンプトが非表示になると、接続された関数は、プロンプトが表示されていたキャンバスを受信します。このイベントは、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)
選択器が表示されました
表面のアートセレクター 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)
選択器を非表示
サーフェスアートセレクター 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)