▼そのUnityの作業、依頼しませんか?
メソッド

【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);
        }
    }
}

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

 

こんな感じです。

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

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

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

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

さいごに

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

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

さぎのみや(@saginomiya8)でした。SNSでシェアしてね( ・∇・) 一生無双モードで頑張るよ。

Unityサンプルゲーム
【Unity2D&3Dサンプルゲーム】動画よりわかりやすく記事でゲームを作ろう【チュートリアル】【Unity2D&3Dサンプルゲーム・チュートリアル】Unityにおいてのサンプルゲームの作り方が書いてある記事って少ないですよね。そこで当サイトUnishar(ユニシャー)が動画よりわかりやすいサンプルゲームを無料で提供します。...
ABOUT ME
さぎのみや
さぎのみや
超書手。現在はUnityメディア「ユニシャー」の運営とゲーム開発がメインです。Unity、ライティング関係のお仕事お待ちしております。 >>詳しいプロフィール >>Amazonほしいものリスト
【Unity3D】新しいサンプルゲーム(チュートリアル)を作りました!!!
Unity有料サンプルゲーム

「Unityで3Dゲームを本格的に作っていきたい!」という人におすすめのチュートリアルとなっています。

画像のようなゲームの作り方を販売しています。色々と応用できるサンプルゲームとなっています。ぜひ、作ってみてください。

詳細
>>【Unity3Dサンプルゲーム・チュートリアル】「フリスビーを犬に届けよ!」の概要

>>BOOTHでこのチュートリアルを見る

【RT・フォローであなたのスキルが上がる】

シェアフォローする

さぎのみやのモチベが上がる

コンテンツの質が上がる

あなたの能力も上がる

あなたの
Twitterでのシェア

であなたの能力が上がります。

>>さぎのみやのツイッター(@saginomiya8)

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


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