Unityでゲーム、アプリ開発

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

Unity ブロック崩し作り②減速、バーのすり抜けを修正しよう!3Dゲーム作り

ブロック崩し作りの続きですが前回のままだと不具合があるので
今回はボールの減速、バーの壁すり抜け、ブロックの削除の方法の紹介です。


ブロック崩し作り②減速、バーのすり抜けを修正しよう!

f:id:Phoenix9056:20200527033227p:plain

※前回の続きになるので気になる方は前回の記事をご覧ください。
www.unityprogram.info

前回の続きから作っている方はもしかしたら枠を作って壁を配置した時に
影が出来て困ったかと思います。

f:id:Phoenix9056:20200527033537p:plain

Hierarchy内にある①Directional Lightをクリックして、
Inspector内にある②Shadow TypeNo Shadowsに変更して
影を消してしまいましょう。


せっかく作るので色、デザインをつけてみましょう!

f:id:Phoenix9056:20200527034208p:plain

エディタ画面上部にあるWindow⇨Asset Storeをクリックして
アセットストアからReal Materialsと検索してインポートしてください。
たくさんのデザイン(マテリアル)が入っているので時間がかかり必要ない方は飛ばしてください。

※ブラウザからのインポートは下記リンクより。
assetstore.unity.com

※アセットストアの使い方が分からない方は下記記事を参考にしてください。
www.unityprogram.info


f:id:Phoenix9056:20200527035006p:plain

Project内にある先程インポートしたアセット①のMetal texturesの▶︎をクリックして
自分の好きなデザインを選んで②の球体になっているMaterialをドラッグして
色を変更したい部分のオブジェクトに③のようにドロップします。

もし気に入らなかったらまたデザインを選んでドラッグ&ドロップすると
変更が可能になります。
枠やバーやボールなどのオブジェクトを好きなデザインにしてみましょう!


今度はバーが壁を突き抜けないように修正します。

f:id:Phoenix9056:20200527040106p:plain

バーのオブジェクトのInspectorにある
Rigidbody内、Collision DetectionContinuosに変更するだけです。

高速なオブジェクトが止まっているオブジェクトのコライダに当たった時に
しっかり検知してくれる
が簡単な説明かと思います。
詳しく知りたい方はUnityマニュアルをご覧ください。
※一応リンクを貼っておきます。
docs.unity3d.com


次に、ボールが減速しないようにスクリプトを変更します。

前回の続きからの人は、コードを削除してコピー&ペーストするか
同じ記述にしてください。
新しく作る場合はProject⇨Assets内で右クリック⇨Create⇨C# Scriptを選択して
名前をBallMoveにします。

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

public class BallMove : MonoBehaviour
{
    //ボールの横のスピード
    public float xSpeed = 5.0f;
    //ボールの縦のスピード
    public float ySpeed = 5.0f;
    
    private void Start()
    {
        //GetComponentでRigidbodyを取得してvelecity速度をVector3で指定します。
        transform.GetComponent<Rigidbody>().velocity = new Vector3(xSpeed, ySpeed, 0.0f);
    }

    //他のコライダーに衝突した時の処理
    void OnCollisionEnter(Collision other)
    {
        //Vector3型を変数vectorで指定して位置、重力、速度を参照します。
        Vector3 vector = transform.GetComponent<Rigidbody>().velocity;   
        //もし横の速度が0以下だった場合
        if (vector.x < 0.0f)
        {      
            vector.x = -5.0f;        
        }
        else
        {      //横の速度を指定した速度に戻します。         
            vector.x = xSpeed;         
        }
        //もし縦の速度が0以下だった場合
        if (vector.y < 0.0f)
        {       
            vector.y = -5.0f;        
        }
        else
        {       //縦の速度を指定した速度に戻します。        
            vector.y = ySpeed;         
        }
        //位置、速度、重力を変数vectorにします。
        transform.GetComponent<Rigidbody>().velocity = vector;  
    }


}

ボールのスピードはInspectorより好きな数字に変更して
色々試して好みの感じにしてください。


ブロックを作っていきましょう!

f:id:Phoenix9056:20200527051815p:plain

Hierarchy内の①+をクリック⇨3D Object⇨Cubeを選択して②Cubeを作成して名前をBlockにします。
次に、Inspector内からTransformの変更をするのですが、
前回の続きからの人は全部オブジェクトのPositionZ10で統一してあるので10にします。

大きさは好みでいいと思いますが一応
ScaleのX⇨3、Y⇨0.5、Z⇨1にしました。
④の値を参考にしてください。

一個ずつ作るのは大変なので、一度Assets内にドラッグ&ドロップして
③のようにプレハブ化してどんどん設置していきましょう。


ボールがブロックに当たると消えるようにしていきます。

f:id:Phoenix9056:20200527053325p:plain

Project⇨Assets内で右クリック⇨Create⇨C# Scriptを選択して
名前をBlockDestroyに変更します。
次のコードをコピー&ペーストするか同じ記述にしてください。

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

public class BlockDestroy : MonoBehaviour
{
    //他のコライダーと衝突した時の処理。
	void OnCollisionEnter(Collision other)
	{
        //オブジェクトを削除します。
		GameObject.Destroy(this.gameObject);
	}
}

出来上がった①のスクリプトを②のプレハブ化したBlock
ドラッグ&ドロップすると全てのBlockに反映するので
コレで完成です。

再生してみましょう!

f:id:Phoenix9056:20200527055741g:plain

上手くいったでしょうか?
今日はこんな感じで終わりたいと思います!

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

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

youtu.be

関連記事

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

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

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

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

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