【Unity3D】タップしたところにオブジェクトを飛ばす【スクリプト例あり】

  • タップしたところにオブジェクトを飛ばしたい!

というなやみを解決します。

この記事では2つのスクリプトを使って、タップしたところにオブジェクトを飛ばしていきます。一回タップしてオブジェクトを飛ばすのはもちろんのこと、複数回タップしてもオブジェクトを飛ばします。

今回は「Cube」を飛ばします。自分が飛ばしたいオブジェクトに変更できるようです。

1からオブジェクトを飛ばすスクリプトを作成しているので、1から作成していきたい人は順番通りに、その他の人は適宜利用してください。

目次

タップしたところにオブジェクトを飛ばす

  1. オブジェクト(Cube)を制御するための「CubeController」スクリプト
  2. オブジェクト(Cube)を複数生成するための「CubeGenerator」スクリプト

2つにわける理由はのちのち編集しやすくするためです。①の方は、絶対わける必要ないと思われるぐらい少ない分量なのですが許してほしいです( ・∇・)

レイアウトは【2 by 3】です。見にくい方は【Unity】効率アップ!レイアウト(Layout)を変更してできる5個の開発画面で【2 by 3】に変更してください。

このプロジェクトがほしい

1から作るのが面倒な場合は、こちらにプロジェクトを上げているのでダウンロードしてみてください。

バージョンは2018.2.5です。多分エラーは起きないと思いますが、もし起きたらごめんなちゃい。

>>タップしたところにオブジェクトを飛ばすプロジェクトをダウンロード

オブジェクトの準備

Cubeを作成

Cubeを作成

【Hierarchy】→【Create】→【3DObject】→【Cube】

まず立方体を作成していきます。名前は変更しません。

Rigidbodyをつける

Rigidbodyをつける

【Cube】→【Inspector】→【Add Component】→【Rigidbody】

CubeのPrefab(設計図)をつくる

CubeのPrefab(設計図)をつくる

【CubeをProjectウィンドウにドラッグ&ドロップする】→【Rename】→【CubePrefab】

Prefabからオブジェクトを作って、タップしたごとにオブジェクトを飛ばすのでこの作業を行います。

Hierarchy上から「CubePrefab」を削除

Hierarchy上から「CubePrefab」を削除

【Hierarchyウィンドウ】→【CubePrefabを右クリック】→【Delete】

Hierarchyウィンドウから【CubePrefab】を削除してください。

MainCameraのタグを変更

MainCameraのタグを変更

【Hierarchy】→【MainCamera】→【Inspector】→【Tag】→【MainCamera】

MainCameraのタグを変更します。

「CubeController」スクリプトを作成する

スクリプトを作成、アタッチ

スクリプトを作成、アタッチ

【Projectウィンドウ】→【CubePrefabを選択】→【AddComponent】→【New Script】→【CubeController】

スクリプトの作成とアタッチを行っています。CubeControllerスクリプトをダブルクリックしてください。これからスクリプトを記述していきます。

スクリプトを記述

CubeController.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeController : MonoBehaviour {

    public void Shoot(Vector3 dir)
    {
        GetComponent<Rigidbody>().AddForce(dir);
    }

    // Use this for initialization
void Start () {

    }

    // Update is called once per frame
void Update () {

    }
}

たったこれだけです。RigidbodyのAddForceを使って、オブジェクトを飛ばします。

「CubeGenerator」スクリプト

CubeGeneratorオブジェクトを作成

CubeGeneratorオブジェクトを作成

【Hierarchy】→【Create】→【Create Empty】→【CubeGenerator】

スクリプトを再生するために空のオブジェクトを作成していきます。

スクリプト作成、アタッチ

スクリプト作成、アタッチ

【Projectウィンドウ】→【CubeGeneratorを選択】→【AddComponent】→【New Script】→【CubeGenerator】

スクリプトの作成とアタッチを行っています。CubeGeneratorオブジェクトにCubeGeneratorスクリプトをアタッチというわかりづらい表現ですいません。

CubeGeneratorスクリプトをダブルクリックしてください。これからスクリプトを記述していきます。

スクリプトを記述

CubeGenerator.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeGenerator : MonoBehaviour {

    public GameObject CubePrefab;

    // Use this for initialization
void Start () {

    }

    // Update is called once per frame
void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject Cube =
                Instantiate(CubePrefab) as GameObject;

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector3 worldDir = ray.direction;
            Cube.GetComponent<CubeController>().Shoot(
                worldDir.normalized * 3000);
        }
}
}

詳しい説明はまた今度

アウトレット接続する

アウトレット接続する

【Hierarchy】→【CubeGeneratorオブジェクトを選択】→【CubeGeneratorオブジェクトをInspectorのCubePrefabにドラッグ&ドロップする】

これでタップ(PCだと左クリック)した瞬間にオブジェクトが発射されます

ゲーム実行して遊んでみてください。

ちなみにCubeGeneratorスクリプトをこのように変更すると

CubeGenerator.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeGenerator : MonoBehaviour {

    public GameObject CubePrefab;

    // Use this for initialization
void Start () {

    }

    // Update is called once per frame
void Update () {
        if (Input.GetMouseButton(0))
        {
            GameObject Cube =
                Instantiate(CubePrefab) as GameObject;

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector3 worldDir = ray.direction;
            Cube.GetComponent<CubeController>().Shoot(
                worldDir.normalized * 3000);
        }
}
}

押し続けている間、立方体が発射されます。

こんな感じです。

時間経過でオブジェクトを消す方法

気分よくオブジェクトを発射していると、生成されたオブジェクトがたまりにたまって重くなります。今回ではあまり感じないけどね( ・∇・)

そこで時間経過でオブジェクトを消す方法の記事も書きました。超簡単ですので、真似してみてね。

あわせて読みたい
3行で完了!時間経過でオブジェクト(Prefabで生成した)が削除されるようにする方法 Prefabによってつくられたオブジェクトを時間経過で削除したい この悩みを解決します。 Destroy(gameObject, 時間); オブジェクトを時間経過で破壊 これを使うことによ...

さいごに

なんかシューティングゲームとかで使えそうだね。

以上タップしたところにオブジェクトを飛ばす方法でした。

さぎのみや(@saginomiya8)でした。

あわせて読みたい
【Unity2D&3Dサンプルゲーム】動画よりわかりやすく記事でゲームを作ろう【チュートリアル】 ▼この記事を先に見ておきましょう▼ https://miyagame.net/basis-cs/ 当サイトではUnityでのサンプルゲームを作成することができます。Unityでゲームを作っていきましょ...
タップでオブジェクトを飛ばす

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次