クリックしたところにパーツを置くツールを作成します。
- WorkspaceにToolを追加します。
- Toolの中にPartを入れます。
- Partの名称をHandleに変えます。
- ToolをStarterPackに移動します。
- Toolの中にRemoteEventを追加します。(クライアントからサーバープログラムを実行するため)
- Toolの中にLocalScriptを追加します。(クライアントで動作するプログラム)
- Toolの中にScriptを追加します。(サーバーで動作するプログラム)
- LocalScriptとScriptに次のプログラムを入れます。
LocalScriptのプログラム
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local tool = script.Parent
local remoteEvent = tool:WaitForChild("RemoteEvent")
local REACH = 100 -- どのくらい先までクリックが有効か
function OnEquipped(mouse)
mouse.Button1Down:Connect(function()
local unitRay = mouse.UnitRay
local ray = Ray.new(unitRay.Origin, unitRay.Direction * REACH)
local hit, pos, normal = game.Workspace:FindPartOnRay(ray, player.Character)
if hit then
remoteEvent:FireServer(pos)
wait(0.5)
end
end)
end
tool.Equipped:connect(OnEquipped)
Scriptのプログラム
local tool = script.Parent
local remoteEvent = tool:WaitForChild("RemoteEvent")
function putBlock(player,position)
local part = Instance.new("Part")
part.Size = Vector3.new(3,3,3)
part.Position = position
part.Parent = game.Workspace
end
remoteEvent.OnServerEvent:Connect(putBlock)
RemoteEventも使わずに、LocalScript上でputBlockを行うと、クライアントだけが見えるパーツが生成できます。
初コメント失礼します。
私は今、車のゲームを作っているのですが、車のボディーにプレイヤー自身が好きなようにステッカー、文字、柄の大きさや色、位置などを決めて貼れる「リバリーエディタ」という機能を実装しようとしているのですが、プログラムの組み方がわかりません。このような場合どのようなプログラムを組めばよいのでしょうか?
良ければ返信ください
なかなか難しいと思いますが実現は可能だと思います。
まず、車の設計ですが、各パーツにアクセスしやすいように名称付けは必須ですね。
ステッカー等の画像はすべてアセットに入れる必要があります。
ステッカーは透明パーツで作成し、SurfaceGui、Decal を入れます。
Decal のプロパティ Texture にアセットIDを設定することで画像は変わります。
このパーツの位置を変更することで、ステッカーの位置も変えられます。
いきなり本格的なものを作ろうとせず、小規模なもので実験を繰り返しながら徐々に拡張していくことをお勧めします。
ありがとうございます!もう一つ質問があって、プレイヤーの任意で車のバンパーやエアロパーツ等を選択できるようにするプログラムはどう組めばよいのでしょうか?もうすでにいろいろな種類のバンパーなどのカスタムパーツは、blenderでモデリングしてrobloxstudioのワールドに挿入しています。プレイしている間はその挿入したオブジェクトはどこに配置されているのでしょうか?読みづらいコメントですいません。。。
各プレイヤーが選択するようなものはGUIで作成します。それらは StarterGui に入れましょう。
後から挿入するオブジェクトは、ReplicatedStorage もしくは ServerStorage に入れます。
前者はローカルスクリプトからでもアクセスでき、後者はサーバープログラムからしかアクセスできません。どちらに置くかはゲームの仕様により決定します。
ありがとうございます