はじめに
Unityでゲームを作っていると、「一定時間後に何かを実行したい!」という場面がよくありますよね。例えば、クリックしたオブジェクトを一時的に消して、数秒後に再表示させるといった動き。これを簡単に実現できるのが**Invoke
関数**です。
この記事では、Cubeをクリックしたら非表示になり、2秒後に再表示される仕組みを作る方法を解説します。初心者でもすぐに理解できるように、具体的な手順を丁寧に説明します!このテクニックを覚えれば、ゲームにちょっとしたインタラクションを追加するのがグッと楽になりますよ。
Unityを触ったことがないという方はコチラの記事から見てみてください!
この記事で学べること
- Unityの
Invoke
関数を使って、一定時間後に関数を呼び出す方法 - クリック操作でオブジェクトを非表示にする方法
- C#スクリプトをUnityオブジェクトにアタッチする方法
完成イメージ
ゲーム画面でCubeをクリックすると、そのCubeが非表示になります。そして2秒後、Cubeが自動的に再表示される仕組みです。クリック動作に応じて簡単なアニメーションのような効果が実現します。
手順
1. Cubeを作成する
- Unityを起動し、新しい3Dプロジェクトを作成します。
- ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
- 「3D Object」→「Cube」を選んで、画面にCubeを作成します。
2. 新しいスクリプト「CubeClick.cs」を作成する
- プロジェクトウィンドウを右クリックします。
- 「Create」→「C# Script」を選びます。
- スクリプト名を「CubeClick」とします。
3. Cubeにスクリプトをアタッチする
- ヒエラルキーウィンドウでCubeを選択します。
- 「CubeClick.cs」スクリプトをドラッグ&ドロップでCubeにアタッチします。
4. スクリプトを編集する
- 「CubeClick.cs」をダブルクリックして開きます。
- 以下のコードを入力します:
① 最初の準備部分
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine;
これはUnityで使える基本的な機能を使うために必要なコードです。- 他の
using
は今回は使われていませんが、将来的に必要な場合があります。
② クラスの宣言
public class CubeClick : MonoBehaviour
public class CubeClick
このスクリプトの名前です。スクリプト名とクラス名は同じにする必要があります。: MonoBehaviour
Unityのスクリプトは必ずこのMonoBehaviour
を継承して動きます。これがあることで、Unityがこのクラスを「ゲームオブジェクト用」と認識します。
③ マウスクリックの処理
void OnMouseDown()
{
// Cubeを非表示にする
this.gameObject.SetActive(false);
// 2秒後にCubeActive関数を呼び出す
Invoke("CubeActive", 2.0f);
}
void OnMouseDown()
- Unityが用意している特別な関数です。この関数はオブジェクトがマウスでクリックされたときに自動的に呼び出されます。
this.gameObject.SetActive(false);
this.gameObject
は、このスクリプトがアタッチされているオブジェクトを指します。.SetActive(false)
は、このオブジェクトを「非表示」にします。非表示になると、見えなくなるだけでなく、動きも停止します。
Invoke("CubeActive", 2.0f);
Invoke
は指定した関数を一定時間後に呼び出します。"CubeActive"
は呼び出す関数の名前。2.0f
は2秒後を意味します。
④ 再表示の処理
void CubeActive()
{
// Cubeを再表示する
this.gameObject.SetActive(true);
}
void CubeActive()
- 自分で作った関数で、
Invoke
で呼び出されます。
- 自分で作った関数で、
this.gameObject.SetActive(true);
- オブジェクトを「表示」に戻します。
全体の動き
- このスクリプトをキューブにアタッチします。
- プレイ中にキューブをクリックすると、**
OnMouseDown()
**が呼ばれます。- キューブが非表示になります。
- 2秒後に、**
CubeActive()
**が呼ばれます。
CubeActive()
でキューブが再び表示されます。
どんなときに使える?
- クリックしたら一時的に消えるエフェクトを作りたいとき。
- パズルゲームやクリックイベントで一時的にオブジェクトを非表示にしたいとき。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeClick : MonoBehaviour
{
void OnMouseDown()
{
// Cubeを非表示にする
this.gameObject.SetActive(false);
// 2秒後にCubeActive関数を呼び出す
Invoke("CubeActive", 2.0f);
}
void CubeActive()
{
// Cubeを再表示する
this.gameObject.SetActive(true);
}
}
注意: スクリプトの編集が終わったら保存(Ctrl + S または Command + S)してください。
5. 動作確認を行う
- Unityエディタ上部にある「▶(再生ボタン)」をクリックして、ゲームを再生します。
- ゲーム画面でCubeをクリックしてみましょう。
- Cubeが非表示になり、2秒後に自動的に再表示されます!
これで完成です!Invoke関数を使った時間遅延処理は、ゲーム制作のいろいろな場面で役立ちます。次のプロジェクトでもぜひ活用してみてください!
まとめ
今回は、UnityのInvoke
関数を使って「一定時間後に関数を実行する仕組み」を作りました。Cubeをクリックすると非表示になり、2秒後に再表示される動作を通じて、基本的な使い方を学べたと思います。
Invoke
は、ゲームの中で「タイミングをコントロールしたいとき」にとても役立つ機能です。例えば、爆発エフェクトの後にオブジェクトを消したり、一定時間ごとにイベントを発生させたりと、いろいろな応用が可能です。
ぜひ、今回学んだことを他のプロジェクトにも活用してみてください!また、もっと複雑なタイミング制御をしたい場合はCoroutine
にも挑戦してみると良いでしょう。あなたのゲーム開発がさらに楽しくなること間違いなしです!
よくある質問(Q&A)
- QInvoke関数の「秒数」を変更したいのですが?
- A
スクリプト内の
Invoke("CubeActive", 2.0f);
の2.0fを好きな秒数に変更すればOKです。
- QInvokeを使わずに同じ動作を実現できますか?
- A
はい、
Coroutine
を使えば似たような動作が可能です。ただし、Invokeは簡単に時間指定ができるので、初心者にはおすすめです。
- Q他のオブジェクトにも同じ動作をさせたい場合は?
- A
このスクリプトを他のオブジェクトにアタッチするだけで同じ動作が可能です。例えば、SphereやCapsuleにも適用できます。
Unityアセットストアを覗いてみよう!
今回の記事では、Unityの基本機能だけでオブジェクトをクリックして非表示→再表示させる仕組みを作りました。でも、ゲーム制作をもっと手軽に、さらにプロフェッショナルな見た目にしたいと思ったことはありませんか?
実は、Unityのアセットストアには、ゲーム制作を効率化するための高品質なアセットがたくさん揃っています!たとえば、こんなものがあります:
Unityアセットストアには、無料の素材もありますが、有料アセットは品質が高く、プロが使うようなクオリティのものが多いです。初めて購入する場合も、レビューや動画で事前に確認できるので安心です。
アセットを使うと何が変わるの?
- 作業時間が大幅短縮:数時間かかる作業が数分で完了!
- ゲームのクオリティが向上:プロのような仕上がりに。
- 直感的な操作:難しいプログラム知識がなくてもOK!
まずは、[Unity Asset Store」を開いてみましょう。きっと、あなたのゲーム制作にぴったりなアセットが見つかるはずです。
ゲーム作りをもっと楽しく、効率的にしたいなら、アセットの力を借りるのも一つの手ですよ!ぜひ一度チェックしてみてくださいね!