10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】MMDモデルを使ってボールを蹴って物体を壊すゲームを作ろう!その6【基礎】【完結】

Last updated at Posted at 2014-04-01

目次

【Unity】MMDモデルを使ってボールを蹴って物体を壊すゲームを作ろう!
その1
その2
その3
その4
その5
その6(完結)

ボールの作成

前回でゲームステージの作成が完了しました。今回はキャラクターが蹴るためのボールを作成します。

GameObject→Create Other→Sphereを押下し、Sphereを追加します。

スクリーンショット 2014-04-01 20.50.28.png

追加したら、キャラクターより少し前に置きたいので、
名前をBall
position x:0 y:1 z:-5
に設定してください。

そして物理演算したいので、AddComponent→Physics→Rigidbodyを追加しておきます。
そして、以下のように設定します。
Mass : 10
Use Gravity : false
IsKinematic : false

スクリーンショット 2014-04-01 21.13.08.png

massは質量の事です。
飛ばした時にcubeより軽いと弾かれてしまうので、
重めに設定しています。

合わせてgontaも移動させておきましょう。
position x : 0 , y : 0 , z : -10
にしましょう。

蹴っ飛ばすスクリプトを作成

そして、キャラクターが触れたらボールが飛ぶようにスクリプトを作成します。Create→C# ScriptでBallSetupという名前にしてください。

BallSetup.cs
using UnityEngine;
using System.Collections;

public class BallSetup : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

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

    }

    void OnTriggerEnter(Collider col){
        Vector3 pos = col.transform.forward;
        Vector3 newVector = (pos).normalized;
        rigidbody.velocity = newVector * 30;
    }
}

OnTriggerEnter
これは物体同士衝突した時に一度だけ呼ばれるメソッドです。
ボールとプレイヤーが触れたらボールを飛ばしたいのでここに処理を記述します。

引数で渡ってくるcolliderは当たったゲームオブジェクトそのものです。
transform.forwardはgontaが向いている向きです。
その方向を取得し、ぶっ飛び係数(ここでは30)を掛けてvelocityにその方向を加えて飛ばします。

このスクリプトが出来たらballにD&Dして追加して、実行!

スクリーンショット 2014-04-01 21.16.54.png

動きませんね。
ボールに触れたはずなのに、障害物のように横をするーっと滑って通り過ぎてしまいました。

実はOnTriggerEnterのイベントを発行するためにはColliderのIsTriggerフラグをONにしなければなりません。

スクリーンショット 2014-04-01 21.20.19.png

ということはballのisTriggerをONにしてあげれば動くはずです!
早速ONにして実行!きたー!!!!

スクリーンショット 2014-04-01 21.23.03.png

(遠くに小さく見える白い丸がボールです)
(よく見えるようにSmoothFollowのLook At Angleを45に設定しています)

あれ?

ボールは飛んだ!蹴った!だけど、cubeの山をすり抜けてしまいました。
理想としては、蹴ったボールの勢いでcubeの山が貫かれ、吹き飛びながら崩れ落ちるような動きを
してほしいです。

なんですり抜けたのか?

理由は先ほどのIsTriggerにあります。
このIsTriggerフラグをONにすると、イベントの判定を行うが、物理エンジンの影響を受けなくなるのです。

Sphere Collider

よって、ちょっとスクリプトを修正します。

BallSetup.cs
using UnityEngine;
using System.Collections;

public class BallSetup : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

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

    }

    void OnTriggerEnter(Collider col){
        Vector3 pos = col.transform.forward;
        Vector3 newVector = (pos).normalized;
        rigidbody.velocity = newVector * 30;
        this.collider.isTrigger = false;
    }
}

飛ばす瞬間にIsTriggerをOFFにするだけなんですけども。

実行しましょう…。蹴った!ぶっ飛びました!!!!

スクリーンショット 2014-04-01 21.35.17.png

気持ちいいですね!
ついにMMDモデルを動かし、ボールを蹴って、物体を壊す事が出来ました!

最後に

随分と長くなってしまいましたが、
MMDモデルを使ってボールを蹴って物体を壊すゲームを作ろう!
はここで一旦完結と致します。

さらにゲームらしくするとしたら
・壊すcubeの山を家や城に見立てたものに変えたりしてみる
・音を追加する
・パーティクルを使いさらに派手な演出を追加してみる
・Materialで物質のリアリティを高める
などなどが考えられますが、
キリが無いので一旦ここまでとさせて下さい。

MMDの追加の仕方だけ、
ステージをスクリプトで作る部分だけ、
Animatorの使い方だけ、

など部分部分だけでもいいので、これからUnityをやろう!と
思っている人の参考になれば幸いです。

初めてUnityの記事を書いてみましたが、これは大変…。
次はtips的なちょっとしたことにしよう。そうしよう。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?