簡単な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

