目次
【Unity】MMDモデルを使ってボールを蹴って物体を壊すゲームを作ろう!
その1
その2
その3
その4
その5
その6(完結)
ボールの作成
前回でゲームステージの作成が完了しました。今回はキャラクターが蹴るためのボールを作成します。
GameObject→Create Other→Sphereを押下し、Sphereを追加します。
追加したら、キャラクターより少し前に置きたいので、
名前をBall
position x:0 y:1 z:-5
に設定してください。
そして物理演算したいので、AddComponent→Physics→Rigidbodyを追加しておきます。
そして、以下のように設定します。
Mass : 10
Use Gravity : false
IsKinematic : false
massは質量の事です。
飛ばした時にcubeより軽いと弾かれてしまうので、
重めに設定しています。
合わせてgontaも移動させておきましょう。
position x : 0 , y : 0 , z : -10
にしましょう。
蹴っ飛ばすスクリプトを作成
そして、キャラクターが触れたらボールが飛ぶようにスクリプトを作成します。Create→C# ScriptでBallSetupという名前にしてください。
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して追加して、実行!
動きませんね。
ボールに触れたはずなのに、障害物のように横をするーっと滑って通り過ぎてしまいました。
実はOnTriggerEnterのイベントを発行するためにはColliderのIsTriggerフラグをONにしなければなりません。
ということはballのisTriggerをONにしてあげれば動くはずです!
早速ONにして実行!きたー!!!!
(遠くに小さく見える白い丸がボールです)
(よく見えるようにSmoothFollowのLook At Angleを45に設定しています)
あれ?
ボールは飛んだ!蹴った!だけど、cubeの山をすり抜けてしまいました。
理想としては、蹴ったボールの勢いでcubeの山が貫かれ、吹き飛びながら崩れ落ちるような動きを
してほしいです。
なんですり抜けたのか?
理由は先ほどのIsTriggerにあります。
このIsTriggerフラグをONにすると、イベントの判定を行うが、物理エンジンの影響を受けなくなるのです。
よって、ちょっとスクリプトを修正します。
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にするだけなんですけども。
実行しましょう…。蹴った!ぶっ飛びました!!!!
気持ちいいですね!
ついにMMDモデルを動かし、ボールを蹴って、物体を壊す事が出来ました!
最後に
随分と長くなってしまいましたが、
MMDモデルを使ってボールを蹴って物体を壊すゲームを作ろう!
はここで一旦完結と致します。
さらにゲームらしくするとしたら
・壊すcubeの山を家や城に見立てたものに変えたりしてみる
・音を追加する
・パーティクルを使いさらに派手な演出を追加してみる
・Materialで物質のリアリティを高める
などなどが考えられますが、
キリが無いので一旦ここまでとさせて下さい。
MMDの追加の仕方だけ、
ステージをスクリプトで作る部分だけ、
Animatorの使い方だけ、
など部分部分だけでもいいので、これからUnityをやろう!と
思っている人の参考になれば幸いです。
初めてUnityの記事を書いてみましたが、これは大変…。
次はtips的なちょっとしたことにしよう。そうしよう。