スポンサーリンク
スポンサーリンク
UnityUnityメモ

UnityでUIボタンなどの上では左クリックの機能を一時停止する

Unity

はじめに

こんにちは!今回は、Unityを使って左クリックでボールを発射する機能を作りつつ、UIボタンをクリックしたときにその発射機能を一時停止する方法を紹介します。これにより、プレイヤーがメニュー操作中に誤ってボールを発射するのを防ぐことができます。

ボールオブジェクトの作成

  • ヒエラルキーウィンドウで右クリックして「3D Object」→「Sphere」を選び、ボールを作成します。
  • inspector画面のAddComponentから「Rigidbody」を検索して追加します。
  • ボールオブジェクトをプロジェクトウィンドウにドラッグしてプレハブにします。
  • ヒエラルキーウィンドウで右クリックして「UI」→「Button」を選びボタンを配置します。

スクリプトの作成

  • ボールの発射スクリプトを作成します。プロジェクトウィンドウで右クリックして「Create」→「C# Script」を選び、「BallShooter」と名付けます。
  • スクリプトをダブルクリックして開き、以下のコードを入力します:

コード全体の説明

  • BallShooterクラスは、ボールを生成して飛ばす機能を持つスクリプトです。
  • prefab は、生成するボールの元になるオブジェクトです。
  • buttonOnText は、UIのボタンのテキストを表示するためのものです。

各部分の説明

  1. public GameObject prefab;
    • 生成されるボールのプレハブ(テンプレート)を参照します。インスペクターから設定します。
  2. public Text buttonOnText;
    • ボタンのテキストを表示するためのUIコンポーネントを参照します。インスペクターから設定します。
  3. void Update()
    • 毎フレーム呼び出される関数です。ここで、ユーザーの入力をチェックします。
  4. if (EventSystem.current.IsPointerOverGameObject())
    • マウスがUI要素の上にあるかどうかをチェックします。UIの上にある場合、以下の処理をスキップします。
  5. if (Input.GetMouseButtonDown(0))
    • マウスの左ボタンが押されたかどうかをチェックします。
  6. GameObject ball = GameObject.Instantiate(prefab) as GameObject;
    • prefabから新しいボールオブジェクトを生成します。
  7. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    • カメラの画面上のマウス位置からレイ(光線)を発射します。
  8. Vector3 dir = ray.direction;
    • レイの方向を取得します。
  9. ball.GetComponent<Rigidbody>().AddForce(dir * 3000);
    • 生成されたボールに対してレイの方向に力を加え、ボールを飛ばします。
  10. public void ButtonDown()
    • ボタンが押された時に呼び出される関数です。
  11. buttonOnText.text = "Button On";
    • ボタンのテキストを「Button On」に変更します。

全体の動き

  1. 毎フレーム、マウスがUIの上にあるかどうかをチェックします。
  2. マウスがUIの上にない場合、マウスの左ボタンがクリックされたかどうかをチェックします。
  3. 左ボタンがクリックされたら、新しいボールを生成し、カメラの画面上のマウス位置から飛ばします。
  4. また、ボタンが押された時にボタンのテキストを変更する機能も含まれています。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class BallShooter : MonoBehaviour
{
    public GameObject prefab;
    public Text buttonOnText;

    void Update()
    {
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }
        if (Input.GetMouseButtonDown(0))
        {
            GameObject ball = GameObject.Instantiate(prefab) as GameObject;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector3 dir = ray.direction;
            ball.GetComponent<Rigidbody>().AddForce(dir * 3000);
        }
    }

    public void ButtonDown()
    {
        buttonOnText.text = "Button On";
    }
}

スクリプトのアタッチ

空のゲームオブジェクトを作成し、先ほどのスクリプトをドラッグ&ドロップしてアタッチします。その後、インスペクターでボールプレハブとボタンテキストをスクリプトのprefabbuttonOnTextに設定します。

これで、左クリックでボールを発射する機能と、UIボタンをクリックしたときにその発射機能を一時停止する機能が実装されました。プレイヤーがメニュー操作中に誤ってボールを発射することがなくなり、快適なプレイ体験を提供できます。

ぜひ試してみてくださいね!何か質問があれば、いつでもどうぞ。

おすすめのアセット

UI Toolkit Bundleは、Unityでの2Dゲームやアプリの開発に欠かせないツールを提供するアセットです。このバンドルには、さまざまなUI要素が含まれており、簡単にカスタマイズして使用することができます。例えば、ボタン、スライダー、テキストボックスなど、ゲームのユーザーインターフェースを簡単に作成するためのコンポーネントが豊富に揃っています。

このアセットの特徴として、ドラッグ&ドロップで簡単に配置できる点や、高解像度に対応したデザインが挙げられます。また、初心者でも扱いやすい直感的な操作が可能です。UI要素はすべてスクリプトと連携しており、ゲームの機能とシームレスに統合できます。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました