電車を走らせる
今回から次のオブジェクト”ゲーム躯体”に着手するのですが、変わったアプローチにしたいと思います。前回ダイヤル合わせを完成させPOWERSUPPLYとTRAINの文字盤の色変えを行いましたが、これを条件としてプラグ付きの電車を走らせる→ゲーム躯体に電源を入れるという内容です。まずはオブジェクトを用意しましょう。
次にPowerBoxクラスに以下コードを追加します。
public GameObject agc;//ゲーム躯体入のディスプレイ
public GameObject train;
Vector3 pos;//train用
public GameObject playerCamera;
public GameObject trainCamera;//train移動を観測するカメラ
public static bool flag = false;//powerbox完全クリアのフラグ*次回その16で補足
void Update()
{
if(PPS.activeSelf && PT.activeSelf)
{//POWERSUPPLYとTRAINの文字盤の色変え完了
if (!flag)
{
StartCoroutine(TrainRun());
}
flag = true;
}
}
private IEnumerator TrainRun()
{
yield return new WaitForSeconds(1.0f);
trainCamera.SetActive(true);
playerCamera.SetActive(false);
yield return new WaitForSeconds(1.0f);
while (pos.x > -7.0f)//ループ条件
{
pos = train.transform.position;
train.transform.Translate(-0.05f, 0, 0);
yield return new WaitForSeconds(0.01f);
if (pos.x >= 3.0f)//到達地点
{
break;
}
}
yield return new WaitForSeconds(1.0f);
agc.SetActive(true);
yield return new WaitForSeconds(1.0f);
playerCamera.SetActive(true);
trainCamera.SetActive(false);
}
特段新しい手法は使用していません。以下完了デモですが想定と違う場合は数値をいじっていけばうまく行くと思います。切り替え用のtrainCamera配置を忘れずに。
ケーブルオブジェクト作成
設定上の電力供給が不透明なので電車とpowerboxを電源ケーブルで繋げたいと思います。ケーブルの様なゆらゆら動くオブジェクトを作成する場合HingeJointが一番有効なようです。これを使えばRigidbodyをつけたオブジェクト同士を繋げてグループ化する事ができます。右上powerboxに繋がるオブジェクトと左下の電車の受電ボックス(新たに設置しました)はRigidbodyのiskinematicをONに、それ以外はOFFにしましょう。ONにしたオブジェクトは縄跳びの持ち手のようになります。
繋ぎ方はHingeJoint >ConnectedBodyにRigidbodyをつけたオブジェクトを選択するだけです。ついでにColiderも設定して他のオブジェクトにロープの一部がめり込まないようにしています。
オブジェクト同士の接触判定を制限する
ロープにColiderを設定しましたが、ロープ自身が衝突し続ける懸念があります。全てのロープオブジェクトにRopeタグを設定し、Edit>ProjectSettings>Physics の最下部からRope同士のチェックを外しましょう。これでロープ同士の接触判定が外れます。
コメント