Roblox Studioの制約(Constraint) は、さまざまな物理的メカニズムを作るのにとても便利です。 以下の例で、これらの動作制約で実装したものの一部を紹介します。
Robloxスタジオでは、スクリプトと組み合わせることで面白い結果を生み出すことがあります。
1.商品スキャナー(ヒンジ)
ヒンジ拘束を使って次のようなマシンを作ります:
このチュートリアルでは、Roblox内の単位を1スタッドに設定してください!
1.コンベアの部品を作る。 それぞれに “base”、”leftSide”、”rightSide”という名前をつける。
注:これらの部品がすべて固定されていることを確認してください!
2.ローラー部分を作成し、”roller”と名付ける。
3.”roller”と “leftSide”の間にヒンジを作成します。
4.”roller”と”leftSide”パーツ内の”Attachment”(leftSideそのものではない)を複製し、次の位置に移動する。
(表面の結合オプション)がオフになっていることを確認してください!
作成したパーツをすべて選択し、右クリックで1つのモデルとしてグループ化し、名前を “Conveyor”とする。
5.コンベアの作成が終わったので、それらを複製して1つの長いコンベアにしてみよう。
そして、それらを “Conveyors”という名前のフォルダにまとめる(最終的に9~12個ほど作った)
6.「Script」と「IntValue」を作成し、名前を”ConveyorController”、と “RotateSpeed”にする。
7.”RotateSpeed”の値をとりあえず100に変更する。 これにより、コンベアの回転速度が決まる。
8.”ConveyorController”に次のように入力する:
プログラムの説明:
- 1行目:コンベアがあるフォルダの場所を参照
- 2行目:コンベアフォルダの全アイテムを取得
- 3行目:先ほど作成したIntValueを参照
- 5 行目:conveyorsDescの全項目をループする
- 6行目:現在のアイテムが “HingeConstraint”であれば、以下のコードを実行する
- 7行目:ヒンジのタイプをモーターに変更する。 Motorモードを使えば、HingeConstraintを常に回転させることができる。
- 9行目:rotateSpeedを参照し、-1を掛けて回転方向を変える
9.テストしてみましょう
10.運ばれる商品を作ってみよう。 まず、商品オブジェクトを作成する。
11.これを複製し、片方を “ServerStorage”に置く。 そして、Workspaceの下にあるものに “okGoodsGenerator”という名前に変える。
12.プロパティを変更する
- Transparency(透明度):0.7
- CanCollide(衝突):False(チェックを外す)
- Anchor(アンカー):True(チェックを付ける)
13.その下に「Script」を追加し、名前を “generateGoods”とする
14.次のように入力する:
プログラムの説明:
- 1行目:2~4行目を2秒ごとに繰り返す
- 2行目:ServerStorageの下に保存した “okGoods”を取得し、新しいクローンを作成する
- 3-4行目:クローンの親を割り当て、それをジェネレーターのいる場所に移動させる
スキャナーの装飾を追加した後:
2.シンプル・エレベーター(プリズム)
プリズム制約を使って、簡単なエレベーターを作ることができる。
1.視覚的な補助のために「グリッド素材」をオンにします
2.また、以下が正しいことを確認してください
3.”Base”パーツと”Elevator”パーツを同じフォルダに作成する。 フォルダ名を “SimpleElevator”とします。
4.エレベーター部分を高くして、ベース部分とエレベーター部分の間にプリズマティックを追加できるようにします
注:最初にベースからプリズマティックを作成し、エレベーターの下部に作成するようにしてください。
5.拘束位置(attachment)を調整する
6.エレベーターをスタート位置に戻す
7.図のようにエレベーターの横にポールを立てる(アンカーを打つのを忘れずに)
8.ポールの上に2階を作る(アンカーを打つのを忘れずに)
9.ポールを複製し、図のような位置に置く(ここでもアンカーを打つ)
10.図のように2つのボタンを作成する。 ボタンに「ProximityPrompt」を追加することでボタンを実際に押せるようにします
11.表面の結合をオンにする
12.以下のパーツを作成し、名前を”UpPole”とする
13.三角形パーツを作成し、名前を “UpBtn”とする。 その下に「ProximityPrompt」を追加し、名前を “UpBtnPP”とします
14.”UpPole”を複製し、位置を変えて “DownPole”と名付ける。 また、子の名前をそれぞれ “DownBtn”と “DownBtnPP”にする
15.”PrismaticConstraint”の “LimitsEnabled”を有効にする
そして “UpperLimit”を20に設定する
16.”AcuatorType”を “Servo”に設定し、”ServoMaxForce”、”Speed”、”TargetPosition”の値をそれぞれ設定する
17.”Elevator”の “CustomPhysicalProperties”を有効にする。 “Density”(密度)を0.01に変更する
18.ゲームを実行すると、エレベーターが上がるのがわかる(PrismaticConstraintの “TargetPosition”が20に設定されているため)
19.”SimpleElevator”フォルダの下に「Script」を作成し、名前を “ElevatorController”とします
game.Workspace.SimpleElevator.ElevatorController
- 1行目:”Base”と “Elevator”の間のPrismaticConstraintを参照
- 4 行目:ProximityPromptが押されるたびに(プレイヤーがいずれかのボタンでEキーを押すたびに)、関数を実行します。triggerはプレイヤーによって押されるProximityPromptです。
- 5-8行目:もしプレーヤーが上ボタンか2階にあるボタンを押したら、エレベーターの目標位置をUpperLimit(つまり20)に設定する
- 10~13行目:プレーヤーが下ボタンまたは1階にあるボタンを押した場合、エレベーターの目標位置をLowerLimit(つまり0)に設定する
20.「グリッド素材」をオフにする。 自分の好きな色や装飾をパーツに加える
余談:周囲に壁を追加したい場合は、移動中にボタンやポールが壁に当たらないように位置を調整する必要がある
3.ミサイルランチャー(ヒンジ+ベクターフォース)
これから、HingeとVectorForceを使ってミサイルランチャーを作ります。
まず、ヒンジ制約とクリック検出器を使って、ランチャーの制御可能な回転ベースを作ります。
1.以下のパーツを作成する(サイズは不問)
2.所定の位置に組み立てる(衝突と表面の結合が外れていることを確認する!)
3.”Base”から”Pole”にヒンジを追加します
4.”Pole”から”Holder”にヒンジをもう1つ追加します
5.ゲームを実行し、”MissileLaunchPoint”が落ちてしまった場合:
誤ったケース
LaunchPointがホルダーに溶接されていないことを意味する。 以下を実行する:
正しいケース
6.以下のファイル名を変更する
7.これらの名前を変更した制約の両方を選択する
- 1.”ActuatorType”を “Servo”に変更する
- 2.”AngularSpeed”を50に変更する
- 3.”ServoMaxTorque”を1000000に変更する
8.以下のファイルを追加する
9.”RotationControl”スクリプトを編集する
game.Workspace.MissileLauncher.Control.RotationControl
10.ボタンをクリックし、ランチャーの回転をコントロールできるかテストしてください
11.ホルダーをもう少し長くして、壁を2枚作ろう
ホルダーを長くする
ミサイル発射点を高くする
2つの壁を作る
回転の動きができたので、次はミサイルとそのVectorForceを作る。
1.グリッド設定
2.ミサイルを作る
[Missile img here]
まず、以下のミサイルのパーツを作る:
ボディ
ヘッド
ヘッドとボディを組み合わせる
ユニオンする
フィン
フィンを作る
フィンを複製し、本体に取り付ける
フィンを複製し、ロケットの前部に付けてバランスをとる。 そうしたら、すべての部品をユニオンする
回転させたり向きを変えたりして、位置決めを簡単にする
3.MissileにVectorForceを追加する:
4.ミサイルをランチャーに装着する(ランチャーに入らない場合はサイズを調整する)
5.VectorForceの値を編集する
6.ミサイルを発射するボタンが必要だ。 他のコントロールボタンを作った方法と同じ方法で作る
7.コントロール・スクリプトは回転をコントロールするだけではないので、ファイルの名前を “LauncherControl”に変更しよう。 “LauncherControl”に以下の発射するプログラムを追加する
試してみよう!
(オプション)次のスクリプトを追加して、爆発効果を生み出す