Workspace は、Roblox内で最も重要なサービスの一つであり、ゲームのメインの物理環境を表します。Workspaceはゲーム内で動き回り、相互作用することができる全てのオブジェクト(例えばパーツ、モデル、キャラクターなど)を保持します。これらのオブジェクトは、それぞれが独自の物理的特性(位置、速度、形状など)を持つため、これら全てを一緒に管理するための”コンテナ”としてWorkspaceが働いています。
また、Workspaceは様々なプロパティを持っています。これらはゲームの物理環境を制御する役割を果たしています。例えば、Gravity プロパティはゲームの重力を制御し、FallenPartsDestroyHeight プロパティはパーツが落下した際に、そのY座標がこの値より小さくなった際に自動的に消去する値です。
for i=1,100 do
-- 新しいPartを作成
local part = Instance.new("Part")
-- 親を設定(これでPartが表示される)
part.Parent = game.Workspace
end
100個のパーツが出現します。このプログラムは、Workspace や ServerScriptService で動作します。
Camera
Camera オブジェクトは、プレイヤーがゲーム世界をどのように見るかを制御するための重要な要素です。Cameraはその視点(位置)と視線(向き)を定義し、それによってプレイヤーがゲームをどのように体験するかを大きく影響します。
CameraはWorkspace内に存在し、多くのプロパティを持っています。これらのプロパティには、Cameraの位置(CameraPosition)、視線の方向(CameraSubject)、視野角(FieldOfView)、カメラのモード(CameraType)などが含まれます。
Cameraオブジェクトを利用したサンプルプログラムです。カメラ制御はクライアントの処理になりますので、LocalScript で記述することになります。下記のプログラムは、StarterPlayer の StarterCharacterScripts に入れることで動作します。
-- プレイヤーのカメラを取得
local playerCamera = game.Workspace.CurrentCamera
-- カメラの位置を設定
playerCamera.CFrame = CFrame.new(Vector3.new(10, 10, 10), Vector3.new(0, 0, 0))
-- カメラの視野角を変更
playerCamera.FieldOfView = 70
-- カメラのタイプを変更
playerCamera.CameraType = Enum.CameraType.Scriptable
このスクリプトはまず、現在のプレイヤーのカメラを取得します。次に、カメラの位置(CFrame)を新しい位置に設定します。ここでは、カメラは(10, 10, 10)の位置にあり、(0, 0, 0)の方向を向いています。次に、カメラの視野角(FieldOfView)を70度に変更します。最後に、カメラのタイプ(CameraType)を「Scriptable」に変更します。これにより、カメラの振る舞いはスクリプトによって完全に制御されるようになります。
Terrain
Terrain は、Robloxのゲームに自然な地形や環境要素を追加するためのオブジェクトです。山、谷、水の流れなどを作成し、リアルな3D環境を構築するのに役立ちます。
Terrainは、ゲーム内に存在する全ての地形ブロックを保持するための容器として機能します。Smooth Terrainと呼ばれる特殊なタイプのパーツで、これは一緒に置かれると自然な形状を形成する一連のブロックから成り立っています。
一般的には地形ツールを使って作成しますが、プログラムから操作することもできます。
Terrainオブジェクトは、一連のプロパティと関数を提供します。例えば、WaterWaveSize やWaterWaveSpeed といったプロパティを通じて水の表面の動きを制御することができます。また、Terrainオブジェクトは、地形を操作するためのメソッド(関数)も提供します。例えば、FillBlockというメソッドは、指定範囲に地形を作成するものです。
-- Terrainオブジェクトを取得 local terrain = game.Workspace.Terrain -- 指定範囲に水を追加 terrain:FillBlock(CFrame.new(10,10,10), Vector3.new(50,50,50),Enum.Material.Water) -- 指定範囲を削除(空気を追加) terrain:FillBlock(CFrame.new(20,20,20), Vector3.new(30,30,30),Enum.Material.Air)