プログラミングに少し慣れてきた初心者にとって、オブジェクトが特定の領域に侵入したり退出したりする時に色を変えるようなインタラクションを作るのは、楽しくもあり、学習にもなるプロジェクトです。ここでは、Unityでオブジェクトのカラーを特定の領域に入った時と出た時に変更する基本的な方法を、できるだけ簡単に解説します。
Unityプロジェクトの準備
まずは、Unityエディタを開いて新しいプロジェクトを作成しましょう。プロジェクト名は何でも構いませんが、例として「ColorChangeDemo」などがおすすめです。
![](https://cbagames.jp/wp-content/uploads/2024/01/2024-01-27_184016.png)
シーンのセットアップ
- Unityエディタで新しいシーンを開きます。
- シーンに3Dオブジェクトを追加します。例えば、「GameObject」メニューから「3D Object」 -> 「Cube」を選択してキューブを追加します。
- さらに、「3D Object」 -> 「Sphere」を選択して、球体を追加します。この球体が特定の領域に入ったり出たりするオブジェクトとなります。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-07_163333.png)
オブジェクトの設定
キューブを特定の領域として使用しますが、この領域を物理的に反応させるためにはコライダーが必要です。
- キューブに選択し、「Add Component」ボタンをクリックします。
- 「Physics」カテゴリから「Box Collider」を選択して追加します。
- 「Is Trigger」オプションにチェックを入れます。これにより、他のオブジェクトがこのキューブに触れた時にイベントが発生するようになります。
- マテリアルを作成し、Cubeを透明色に変更しておきます。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-07_163505.png)
スクリプトでのカラー変更
次に、球体がキューブの領域に入った時と出た時に色を変更するスクリプトを作成します。
SphereにはRigidbodyをアタッチします。
ステップ1: スクリプトの作成
- 「Assets」フォルダの中で右クリックし、「Create」 -> 「C# Script」を選択します。スクリプト名を「ColorChanger」とします。
- 作成したスクリプトをダブルクリックして、コードエディタで開きます。
ステップ2: スクリプトの編集
スクリプトには、以下のコードを追加します。
このC#スクリプトは、オブジェクト(この場合はプレイヤーを想定しています)がキーボードの入力に応じて水平方向と垂直方向に移動します。加えて、このオブジェクトが特定のオブジェクト(名前が”Cube”とされたオブジェクト)の領域内にいる間は色を黄色に変更し、その領域から離れた瞬間に色を青に変える機能が実装されています。
ここでの重要な機能は次のとおりです:
Update
メソッド: このメソッドは毎フレーム呼び出されます。プレイヤーの入力に基づいてオブジェクトの位置を更新することで、オブジェクトの移動機能を実現しています。Input.GetAxis("Horizontal")
とInput.GetAxis("Vertical")
はそれぞれ水平方向と垂直方向の入力を取得し、これをもとにオブジェクトの新しい位置を計算します。OnTriggerStay
メソッド: このメソッドは、オブジェクトが他のトリガーCollider(この例では”Cube”)の内部にいる間、毎フレーム呼び出されます。この例では、その条件が満たされるとオブジェクトの色を黄色に変更します。OnTriggerExit
メソッド: オブジェクトがトリガーCollider(”Cube”)の外に出た瞬間に呼び出されます。このメソッドにより、オブジェクトが指定された領域を離れると色を青に変える機能が実装されています。
このスクリプトをゲームオブジェクトに適用するには、そのオブジェクトにRigidbody
コンポーネントとCollider
コンポーネントが設定されている必要があります。また、”Cube”オブジェクトにはCollider
コンポーネントが設定されており、そのIs Trigger
プロパティが有効になっている必要があります。これにより、物理的な衝突ではなく、トリガーイベントに基づいた相互作用が可能になります。
using UnityEngine;
public class ColorChanger : MonoBehaviour
{
void Update()
{
float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f;
float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
transform.position = new Vector3
(
transform.position.x + dx, 0.5f, transform.position.z + dz
);
}
//Cubeに侵入している間に発生
private void OnTriggerStay(Collider other)
{
if (other.gameObject.name == "Cube")
{
GetComponent<Renderer>().material.color = Color.yellow;
}
}
//Cubeから離れたときに発生
private void OnTriggerExit(Collider other)
{
if (other.gameObject.name == "Cube")
{
GetComponent<Renderer>().material.color = Color.blue;
}
}
}
ステップ3: スクリプトの適用
- スクリプトを球体にドラッグ&ドロップして適用します。
- ゲームを実行して動作をチェックをします。
まとめ
これで、Unityで特定の領域にオブジェクトが侵入した時と退出した時にカラーを変更する基本的な方法をマスターしました。このプロジェクトを通じて、Unityのトリガーイベントやコライダーの基本的な使い方、さらにはC#スクリプトでの条件分岐やオブジェクトのプロパティ操作について学ぶことができます。Unityでの開発は、こうした小さな一歩から始まります。もっと複雑なインタラクションやゲームメカニクスに挑戦する前に、基本をしっかりと理解しておくことが重要です。幅広い可能性を秘めたUnityの世界を楽しんでください。