はじめに
こんにちは!今日は、Unityを使ってプレーヤーオブジェクトを操作し、他のオブジェクトに触れたときにそのオブジェクトの色に変わる機能を作ってみましょう。今回は「Cube(キューブ)」というプレーヤーオブジェクトを使います。
1. プロジェクトのセットアップ
まず、新しいUnityプロジェクトを作成しましょう。プロジェクト名は「ColorChangeGame」とでもしておきます。
2. プレーヤーオブジェクトの作成
次に、プレーヤーオブジェクトとしてのキューブを作成します。
- ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
- 「3D Object」→「Cube」を選びます。
- インスペクターウィンドウの一番下にある「Add Component」ボタンをクリックします。
- 検索バーに「Rigidbody」と入力します。表示された「Rigidbody」をクリックします。
このキューブがプレーヤーオブジェクトになります。名前を「Player」に変更しておくとわかりやすいです。
3. 衝突するオブジェクトの作成
次に、プレーヤーが触れると色が変わるオブジェクトを作ります。こちらもキューブを使います。
- 再度ヒエラルキーウィンドウで右クリックし、「3D Object」→「Cube」を選びます。
- 名前を「ColorChanger」に変更します。
新しいマテリアルを作成する
「ColorChanger」にアタッチするマテリアルを作成しましょう。以下の手順を参考に作成してください。
- プロジェクトウィンドウの空いているところで右クリックします。
- メニューが表示されるので、「Create」を選び、その中の「Material」を選択します。
- 新しいマテリアルが作成されるので、分かりやすい名前を付けましょう(例:MyMaterial)。
- 「ColorChanger」にアタッチして、好きな色に変更します。
4. スクリプトの作成
プレーヤーがオブジェクトに触れたときに色を変えるスクリプトを作成しましょう。
- プロジェクト(Project)ウィンドウで右クリックし、「Create」→「C# Script」を選びます。
- スクリプトの名前を「ColorChange」にします。
- スクリプトをダブルクリックして開き、以下のコードを入力します。
各部分の説明
- 宣言部分
public GameObject obj;
public Color objColor;
public GameObject obj;
:衝突したオブジェクトを保存する変数です。public Color objColor;
:そのオブジェクトの色を保存する変数です。
- Updateメソッド
void Update()
{
float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3;
float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3;
transform.position = new Vector3(
transform.position.x + dx, 0, transform.position.z + dz
);
}
Update()
:毎フレーム実行されるメソッドです。Input.GetAxis("Horizontal")
:左右の矢印キーまたはA/Dキーの入力を取得します。Input.GetAxis("Vertical")
:上下の矢印キーまたはW/Sキーの入力を取得します。Time.deltaTime
:前のフレームからの時間差を取得します。これを使うことで、スムーズな動きを実現します。transform.position
:オブジェクトの現在位置を取得します。new Vector3()
:新しい位置を計算して設定します。
- OnCollisionEnterメソッド
void OnCollisionEnter(Collision collision)
{
obj = collision.gameObject;
objColor = obj.GetComponent<Renderer>().material.color;
GetComponent<Renderer>().material.color = objColor;
}
OnCollisionEnter(Collision collision)
:このオブジェクトが他のオブジェクトと衝突したときに呼ばれるメソッドです。collision.gameObject
:衝突したオブジェクトを取得します。obj.GetComponent<Renderer>().material.color
:衝突したオブジェクトの色を取得します。GetComponent<Renderer>().material.color = objColor
:現在のオブジェクトの色を衝突したオブジェクトの色に変更します。
全体の動き
- ゲームが始まると、Updateメソッドが毎フレーム実行されます。
- プレイヤーが矢印キーやWASDキーを押すと、その入力に応じてオブジェクトが左右または前後に移動します。
- 移動中に他のオブジェクトと衝突すると、OnCollisionEnterメソッドが呼び出されます。
- 衝突したオブジェクトの色が取得され、移動するオブジェクトの色がその色に変更されます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ColorChange : MonoBehaviour
{
public GameObject obj;
public Color objColor;
void Update()
{
float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3;
float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3;
transform.position = new Vector3(
transform.position.x + dx, 0, transform.position.z + dz
);
}
void OnCollisionEnter(Collision collision)
{
obj = collision.gameObject;
objColor = obj.GetComponent<Renderer>().material.color;
GetComponent<Renderer>().material.color = objColor;
}
}
5.スクリプトのアタッチ
最後に、作成したスクリプトをプレーヤーオブジェクトにアタッチします。
- ヒエラルキーウィンドウで「Player」オブジェクトを選択します。
- 「ColorChangeScript」をドラッグ&ドロップして、「Player」オブジェクトにアタッチします。
6.プレイして確認
以上で準備は完了です!Unityのプレイボタンを押して、プレーヤーオブジェクトを「ColorChanger」オブジェクトに触れさせてみましょう。うまくいけば、プレーヤーオブジェクトが触れたオブジェクトの色に変わるはずです。
まとめ
お疲れ様でした!今回は、プレーヤーオブジェクトが他のオブジェクトに触れたときにその色に変わる機能を作成しました。これを応用すれば、さまざまなゲームのアイデアに使えるかもしれませんね。楽しんでUnityでの開発を続けてください!
おすすめのアセット
「Color Jump – Complete Game」は、色を変えながらジャンプして進むシンプルで楽しいゲームテンプレートです。このアセットは、プレイヤーがジャンプして色を一致させることで進行し、高得点を目指します。初心者でも使いやすく、カスタマイズが簡単です。