簡単な3Dパズル風ゲーム作成の第2回目です。今回はブロックとスイッチを設定していきます。
はじめに
前回の続きの第2回目です。第1回目は下記から。
ゲーム作成開始
前回は「地面」と「壁」と「プレイヤー」を設定しました。今回は「ブロック」と「スイッチ」を設定していきます。
カメラ設定
まずは少しだけカメラの設定をします。位置とスケールをとりあえず仮として変更しておきます。
次に、スクリプトを作成します。プレイヤーが動いた分だけカメラも動くようにしておきます。
スクリプト名は「CameraMove」にして中身を下記に変更します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMove : MonoBehaviour { public GameObject player; private Vector3 _offset; void Start() { _offset = transform.position - player.transform.position; } void LateUpdate() { transform.position = player.transform.position + _offset; } }
作成したスクリプトをカメラオブジェクトにくっつけて変数にPlayerをセットします。
これでプレイヤーが動いた分だけカメラが動きます。
動かすブロックを作成
次にプレイヤーが動かすブロックを作成します。
ヒエラルキーメニューから「3Dオブジェクト」→「キューブ」を追加。
見分けがつきやすいように仮色を付けておきます。
「マテリアル」を作成してブロックにくっつけておきます。
ブロックに「コンポーネントを追加」からRigidbodyを追加。質量を小さくして、回転しないようにします。
これでプレイヤーがブロックを押せるようになります。
スイッチの作成
次にスイッチを作成します。ヒエラルキーメニューから「空のオブジェクトを作成」。名前をSwitchにしておきます。
配下に「3Dオブジェクト」→「キューブ」を追加。スイッチOFF状態です。
サイズを変更して、マテリアルも変更しておきます。
コピーして、スイッチON状態のオブジェクトを追加しておきます。
位置Yを下の方に変更しただけです。
次に、スクリプトを作成。スイッチにブロックが触れたら切り替わるようにします。
スクリプト名は「Switch」にして中身を下記にします。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Switch : MonoBehaviour { public GameObject onSwitch; public GameObject offSwitch; private void OnTriggerEnter(Collider other) { onSwitch.SetActive(true); offSwitch.SetActive(false); } private void OnTriggerExit(Collider other) { onSwitch.SetActive(false); offSwitch.SetActive(true); } }
Switchオブジェクトにスクリプトをくっつけて、変数をセット。
「コンポーネントを追加」からBOXコライダーを追加して、サイズを変更、トリガーにします。
試しに動かして、下記の様にプレイヤーでブロックを押して、スイッチの上に乗った時にオブジェクトが切り替わればOK