Unityでゲーム、アプリ開発

Unityで初めてゲームやアプリを作る人のための支援ブログです。

unity クリックした位置にオブジェクトをランダムに発射しよう。コインゲーム作り② Unity学習29

今回は前回に引き続き、コインゲームを作って行く中で、
クリックした場所にオブジェクトを発射する方法と、色んなオブジェクトを
指定して、ランダムに発射できるスクリプトを作っていきます。


クリックした位置にオブジェクトをランダムに発射する方法!

f:id:Phoenix9056:20200427235139p:plain

※今回は前回のコインゲーム作りの続きなので下記リンクを参考にしてください。
使ってるアセットやスクリプトなんかが載っています。

www.unityprogram.info


f:id:Phoenix9056:20200428022611p:plain

まず、Project内にある前回インストールしたコインアセットの
LiquidFire Package4⇨Devtoid - Gold Coins⇨3D Assets⇨Copper Coin-Single⇨
Prefabs
にある②のシルバーコインを前回の記事で紹介したゴールドコインに色をつけて大きさを変えるやり方で、
色を表示させるようにして大きさを変えてOriginal Prefabとして作成してください。

今回もInspector内にAdd Componentから③のRigidbody
④を飛ばして笑笑
⑤のBox Colliderを追加するのですが、前回のようにBoxColliderの値を
同じにしてもずれてしまいます。

ただやる事は簡単で、Box Collider内にあるCenterXの値を
-0.37に変えるだけでコライダーの位置がコインと同じ位置に戻ります。


f:id:Phoenix9056:20200428024211p:plain

Hierarchy内にある前回Shootスクリプトをアタッチしてある
ゲームオブジェクトをクリックして今回、Shootスクリプト
クリックした場所にオブジェクトを作成するのと、何回かに1回レアなオブジェクトが
出てくるような形で変更
していきます。

始めての方は、空のGameObjectを作成してその中にShootスクリプト
アタッチしてください。

次のコードをコピー&ペーストするか、同じ記述にしましょう。

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

public class Shoot : MonoBehaviour
{
    //int型を変数GoldCoinで宣言して値を5にします。
    const int GoldCoin = 5;
    //int型を変数coinCountで宣言します。
    int coinCount;
    //Inspectorからオブジェクトの指定を配列毎に出来るようにするよ!
    public GameObject[] coinPrefabs;
    public GameObject[] coinSquarePrefabs;
    //各種パラメーターの設定を出来るようにします。
    public float speed;
    public float distance;
    public float coinWidth;
    
    void Update()
    {
        //マウスの左クリックが押されたらShot関数を使用するよ!
        if (Input.GetButtonDown("Fire1")) Shot();
        
    }

    //オブジェクトをプレファブをランダムに1つ選びます。
    GameObject Samplecoin ()
    {
        GameObject prefab = null;

        //5回に一回coinPrefab配列に設定されたオブジェクトを選択。
        if (coinCount % GoldCoin == 0)
        {
            int index = Random.Range(0, coinPrefabs.Length);
            prefab = coinPrefabs[index];
        }
        else
        {
            int index = Random.Range(0, coinSquarePrefabs.Length);
            prefab = coinSquarePrefabs[index];
        }
        
            coinCount++;
        return prefab;

    }

    Vector3 InstantiatePosition ()
    {
        //画面のサイズとInputの割合からキャンディの生成のポジションを計算します。
        float x = coinWidth *
            (Input.mousePosition.x / Screen.width) - (coinWidth / 2);
        return transform.position + new Vector3(x, 0, 0);
    }

    public void Shot ()
    {
        //プレファブからオブジェクトの生成をします。
        GameObject coins = (GameObject)Instantiate(
            Samplecoin(),
            InstantiatePosition(),
            Quaternion.identity);

        //生成したオブジェクトのRigidbodyを取得して力と回転を加えます。
        Rigidbody coinsRigidbody = coins.GetComponent<Rigidbody>();
        coinsRigidbody.AddForce(transform.forward * speed);
        coinsRigidbody.AddTorque(new Vector3(0, distance, 0));
    }
}

変更、完成したら、前回作ったゴールドコインを
Coin PrefabsSizeにして、Element0にドラッグ&ドロップします。
Coin Prefabsに設定されたオブジェクトは、今回5回に一回生成されるようになっています。
レアなオブジェクトやあまり出現させたくないオブジェクトを設定するといいですね!

次に今回作ったシルバーコインをCoin Square PrefabsSizeにして、
Element0にドラッグ&ドロップしましょう!
余談ですがSize数を増やしていろんなオブジェクトを入れると
ランダムに選択して生成してくれるようになっているので、
色々試してみてください。

最後に、Coin Widthの値をに変更して
発射位置の広さを選択します。
お好みで小さくしたり大きくしてみてください。

では!再生してみましょう!

f:id:Phoenix9056:20200428030458g:plain

5回に一回ゴールドコインが出てきましたね!笑笑

今度は、下に落下したらオブジェクトが消える方法
なんかを記述していきたいと思います。

ご視聴ありがとうございました!

今日のゆうきさんのゲーム実況動画はコチラ!

youtu.be

関連記事

※本格的に3Dゲームを作っていきたい方は下記カテゴリを参考にしてください。
www.unityprogram.info

※オススメの無料アセットは下記カテゴリより。便利なアセットが有ます。
www.unityprogram.info

※Unityを学習していきたい方は下記カテゴリを覗いて見てください。
www.unityprogram.info

※実際に使って読んでみたオススメの本は下記カテゴリからご覧ください。
www.unityprogram.info

※初心者に向けた簡単な記事は下記カテゴリより。
www.unityprogram.info