はじめに
Unityで「Cube」を動かして、他のオブジェクトに触れたときにそのオブジェクトの名前を取得する方法について説明します。このチュートリアルでは、Cubeを上下左右に動かし、衝突したオブジェクトの名前を表示するスクリプトを作成します。
シーンの準備
シーンの準備
- ヒエラルキーウィンドウで右クリックし、「3D Object」→「Cube」を選択してシーンにCubeを追加します。
- 同様に、SphereやCylinderなど他のオブジェクトも追加します。これらはCubeが衝突する対象になります。
- 各オブジェクトの位置を適当に配置します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-16_163826.png)
Cubeを動かすスクリプトを作成
- Projectウィンドウで右クリックし、「Create」→「C# Script」を選択してスクリプトを作成します。スクリプト名を「PlayerMovement」にします。
- 「PlayerMovement」スクリプトをダブルクリックして開き、以下のコードを入力します:
コード全体の説明
このスクリプトは、キューブ(立方体)オブジェクトをキーボードの矢印キーで動かし、他のオブジェクトにぶつかったときにそのオブジェクトの名前をコンソールに表示します。
各部分の説明
- 宣言と初期化部分
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMove : MonoBehaviour
{
private string objName;
private float speed = 3.0f;
using
文は、特定の機能を使用するための宣言です。System.Collections
やUnityEngine
などのライブラリを使っています。public class CubeMove : MonoBehaviour
は、新しいクラスCubeMove
を定義し、それがMonoBehaviour
(Unityの基本的なスクリプトクラス)を継承しています。private string objName;
は、衝突したオブジェクトの名前を保存するための変数を宣言しています。private float speed = 3.0f;
は、キューブの移動速度を設定しています。
- Updateメソッド
void Update()
{
float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.position = new Vector3(
transform.position.x + moveX, transform.position.y, transform.position.z + moveZ);
}
Update()
は、毎フレーム(ゲームの1コマ毎)実行される関数です。Input.GetAxis("Horizontal")
は、左右の入力(矢印キーやジョイスティックなど)を取得します。Input.GetAxis("Vertical")
は、上下の入力を取得します。Time.deltaTime
は、前のフレームからの経過時間を取得し、移動をフレームレートに依存しないようにします。speed
は移動速度を制御します。transform.position
はオブジェクトの現在の位置です。これに対して新しい位置を計算して設定します。- OnCollisionEnterメソッド
void OnCollisionEnter(Collision other)
{
objName = other.gameObject.name;
Debug.Log(objName);
}
OnCollisionEnter(Collision other)
は、他のオブジェクトに衝突したときに呼ばれる関数です。other.gameObject.name
で衝突したオブジェクトの名前を取得し、objName
に保存します。Debug.Log(objName)
は、取得した名前をコンソールに表示します。
全体の動き
このスクリプトは、UnityのUpdate()
メソッドを使って毎フレームキーボードの入力をチェックし、キューブオブジェクトを移動させます。矢印キーを押すと、その方向にキューブが動きます。また、キューブが他のオブジェクトにぶつかると、そのオブジェクトの名前がコンソールに表示されます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMove : MonoBehaviour
{
private string objName;
private float speed = 3.0f;
void Update()
{
float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.position = new Vector3(
transform.position.x + moveX, transform.position.y, transform.position.z + moveZ);
}
void OnCollisionEnter(Collision other)
{
objName = other.gameObject.name;
Debug.Log(objName);
}
}
スクリプトをCubeにアタッチ
- ヒエラルキーウィンドウで「Cube」を選択します。
- Projectウィンドウで「MoveCube」スクリプトを探し、「Cube」にドラッグ&ドロップしてアタッチします。
ゲームのテスト
- プレイボタンを押してゲームを開始します。
- キーボードの矢印キーでCubeを動かします。
- Cubeが他のオブジェクトに触れると、コンソールウィンドウに衝突したオブジェクトの名前が表示されます。
これで、Cubeを動かして他のオブジェクトに触れたときにそのオブジェクトの名前を取得する方法がわかりましたね!簡単で楽しいので、ぜひ試してみてください。
おすすめのアセット
「Bubble Merge Template Editor」は、楽しくてカラフルなバブルゲームを簡単に作成できるテンプレートです。このアセットは、プレイヤーが同じ色のバブルをつなげてスコアを稼ぐゲームの制作に最適です。このテンプレートを使えば、プログラミングの知識が少なくても、楽しいバブルゲームを手軽に作ることができます。