UnityUnityメモ

Unity ターゲットに向かってオブジェクトを飛ばす方法【初心者向け】

Unity

はじめに

こんにちは、みなさん!今回は、Unityを使ってオブジェクトをターゲットの方向に発射して勢いよくぶつける仕組みを作ってみましょう。Unityが初めての方はコチラの記事から見てみてください!

ステップ1:オブジェクトの配置

まずは必要なオブジェクトを配置して、わかりやすいようにMaterialで色をつけていきます。

発射するスフィアを作る

  1. ヒエラルキー(Hierarchy) ウィンドウで、右クリックして「3D Object」→「Sphere」を選択します。
  2. Materialを作成して、好みの色に変更します。(この記事では赤いSphereを作ります。)
  3. このSphereを「RedSphere」と名前を変更します。

ターゲットのスフィアを作る

  1. 同じようにして、Sphereを作ります。
  2. Materialを作成して、好みの色に変更します。(この記事では黄色いSphereを作ります。)
  3. このSphereを「YellowSphere」と名前を変更します。

床をオブジェクトの配置

  1. ヒエラルキー(Hierarchy) ウィンドウで、右クリックして「3D Object」→「Plane」を選択し、床を作ります。
  2. Materialを作成して、好みの色に変更します。(この記事では青い床を作ります。)



ステップ2:スクリプトの作成

  1. プロジェクト(Project) ウィンドウで、右クリックして「Create」→「C# Script」を選択します。
  2. このスクリプトを「ClickPower」と名前を変更します。
  3. 「ClickPower」をダブルクリックして開き、以下のコードをスクリプトに追加します。

全体の説明

このスクリプトは、ゲームオブジェクトがクリックされたときに、そのオブジェクトを特定の方向に力を加えて動かす役割を持っています。

各部分の説明

  1. ライブラリのインポート
    • using キーワードを使って、必要なライブラリをインポートしています。UnityEngine は特に重要で、Unityの機能を使うためのものです。
  2. クラスの宣言
    • ClickPower クラスを宣言しています。このクラスは MonoBehaviour を継承しているので、Unityの特定の機能(例えば、UpdateやStartなどのメソッド)を使うことができます。
    • private float power は、オブジェクトに加える力の大きさを保持します。
    • public Rigidbody rb は、物理的な動きを管理するコンポーネントです。
    • public GameObject target は、オブジェクトが向かうターゲットを指します。
  3. Startメソッド
    • Start メソッドは、ゲームが開始されたときに一度だけ呼び出されます。
    • power 変数に30という値を代入しています。これはオブジェクトに加える力の大きさを意味します。
    • target 変数には、シーン内にある “YellowSphere” という名前のゲームオブジェクトを探して代入しています。
  4. OnMouseDownメソッド
    • OnMouseDown メソッドは、オブジェクトがクリックされたときに呼び出されます。
    • transform.LookAt(target.transform) は、オブジェクトをターゲットの方向に向けます。
    • rb = GetComponent<Rigidbody>() で、オブジェクトの Rigidbody コンポーネントを取得します。
    • rb.velocity = transform.forward.normalized * power で、オブジェクトに前方方向に power の力を加えて動かします。

全体の動き

このスクリプトを持つオブジェクトがシーン内でクリックされると、以下の動きが発生します。

  1. オブジェクトは “YellowSphere” の方向を向きます。
  2. オブジェクトに物理的な力が加えられ、その方向に飛んでいきます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ClickPower : MonoBehaviour
{
    private float power;
    public Rigidbody rb;
    public GameObject target;

    void Start()
    {
        power = 30;
        target = GameObject.Find("YellowSphere"); // "YellowSphere" に変更
    }

    void OnMouseDown()
    {
        transform.LookAt(target.transform);
        rb = GetComponent<Rigidbody>();
        rb.velocity = transform.forward.normalized * power;
    }
}

スクリプトのアタッチ

  1. ヒエラルキー(Hierarchy) ウィンドウで、「RedSphere」を選択します。
  2. 「ClickPower」スクリプトを「RedSphere」にドラッグ&ドロップします。



ステップ3:Rigidbodyの追加

最後に発射するSphereに物理特性を追加していきます。

  1. ヒエラルキー(Hierarchy) ウィンドウで、「RedSphere」を選択します。
  2. インスペクター(Inspector) ウィンドウで、「Add Component」ボタンをクリックし、「Rigidbody」を追加します。

4.完成!

これで設定が完了しました!プレイモードにして、赤いSphereをクリックすると、赤いSphereが黄色いSphereに向かって勢いよく飛んでいくはずです。

これで、赤いSphereをクリックすると黄色いSphereに勢いよくぶつかる仕組みが完成です。Unityを使って、さまざまなシーンで試してみてくださいね!

おすすめのアセット

Unityでトップダウンビューのゲームを作ってみたい。それでも、アクションを構築するのは大変そう…と思っていませんか?実は、そんな悩みを解決してくれる高機能なアセットが「TopDown Engine」です!


「TopDown Engine」って何?

このアセットは、Unityでトップダウンビューのゲームをサクサク作りたい方のために用意されたテンプレートです。

  • トップダウン視点に対応した作品構築用テンプレート
  • 多様なキャラクターコントロール:移動、攻撃、さらにその他の操作を簡単に実現できる
  • AIシステム:敵キャラの行動を自由に設定可能
  • 多様なゲームタイプ:RPG、シューティング、ステルスゲームなどのジャンルを実現可能

もちろん、カメラやインターフェイスの設定など、詳細なカスタマイズも自由自在。


こんな人にオススメ
  • Unityを始めたばかりの方
  • プロトタイプゲームを作ってみたい人
  • ゲーム構築の時間を短縮したい方


「TopDown Engine」は、自分の作りたいゲームを楽に、しかもクオリティの高い形で実現したい方におすすめのアセットです。もし気になったらUnityアセットストアで「TopDown Engine」を確認してみてくださいね!自分の作りたい作品を実現しましょう!

よくある質問

Q
Sphereが飛ばないんだけど、どうしたらいい?
A

まず、RigidbodyがRedSphereに追加されているか確認してください。それでもダメなら、スクリプト内のpowerの値を大きくしてみてください。

Q
スクリプトがエラーを出すんだけど、どうしたらいい?
A

スクリプトが正しいオブジェクトにアタッチされているか、「YellowSphere」の名前が正しいか確認してください。また、GameObject.Findが正しいオブジェクトを見つけられているかもチェックしてください。

Q
Sphereが速すぎて見えないんだけど、どうしたらいい?
A

Rigidbodyのドラッグ値を少し増やして、powerの値を調整すると、スピードをコントロールできます。