2016年10月27日

【Unity】複数の目的地を通って動く床を作ってみた

ゲームをやっていると床が離れた場所との間を行ったり来たりしていることがありますよね? 今回はその動く床をUnityで作ってみたいと思います。

今回作る動く床は2か所以上の目的地を設定し、その目的地を通って往復するというものです。
単純な動きですが、敵の巡回なんかにも使えると思います。

まずは空のゲームオブジェクトを作成し、名前をMoveFloorにします。
ポジションを(0,0,0)にします。
ポジションは適当でも大丈夫ですが、(0,0,0)にしておくと後で子オブジェクトを配置する際に座標がワールド座標と同じになるので分かりやすいと思います。

空のオブジェクトMoveFloorを配置。

次は移動させる床を配置します。
MoveFloorの子オブジェクトとしてキューブを配置し、名前をmFloorと適当につけます。
サイズは(5,1,5)にしました。
ポジションは普通の床から少し浮いた適当な場所にします。

MoveFloorの子オブジェクトに動かす床mFloorを配置。

白いままでは味気ないのでテクスチャを貼り付けました。

mFloorにテクスチャを貼った。

mFloorの移動先になる目的地を配置していきます。
MoveFloorの子オブジェクトとして移動させたい目的地の数だけ空のゲームオブジェクトを作ります。
名前はTarget1、Target2といった具合に適当に付けます。

ポジションは移動させたい場所に適当に設定します。
今回は(-5,1.5,0)、(0,5,10)、(5,1.5,0)の3か所に目的地を配置しました。

空のゲームオブジェクトを目的地に配置。

次は床を動かすためのスクリプトを作ります。
プロジェクトウィンドウでJavascriptのファイルを作成し、名前をMoveFloorにしてファイルを開きます。

開いたファイルに下記のコードを書きます。

#pragma strict

public var moveFloor : GameObject;       //移動させる床
public var TargetPoint : GameObject[];    //目的地
public var moveSpeed : float = 5;         //移動速度

private var Target : int = 0;             //TargetPointの配列の番号
private var count : int;                  //TargetPointの長さ
private var ReturnPath : boolean = false; //復路かどうか

function Start () {
	count = TargetPoint.Length;
}

function Update () {
	//動く床が目的地に着いたら次の目的地を設定する
	if(moveFloor.transform.position == TargetPoint[Target].transform.position){
		if(ReturnPath){
			Target --;
			if(Target < 0){
				Target = 1;
				ReturnPath = false;
			}
		} else {
			Target ++;
			if(Target >= count){
				Target = count - 2;
				ReturnPath = true;
			}
		}
	}

	Debug.Log(TargetPoint[Target]); //移動先の確認用。不要なら消してOK。
	moveFloor.transform.position = Vector3.MoveTowards (moveFloor.transform.position, TargetPoint[Target].transform.position, Time.deltaTime * moveSpeed);
}

スタート関数ではcountに目的地の数を代入しています。

次にアップデート関数を見ていきます。
まずif文で目的地に着いたかどうかを判定しています。
さらにif文で往路か復路かを判定し、復路であればTargetの値を1減らして次の目的地を設定しています。
そのときTargetの値が0より小さくなったらTargetを1にして次の目的地を設定し、ReturnPathをfalseにすることで往路に切り替えます。
elseの後はその逆のことなので説明は省きます。

Debug.Log(TargetPoint[Target]);はコンソールウィンドウで移動先を確認するためのものなので消してOKです。

最後にVector3.MoveTowardsを使って目的地まで床を移動させます。
Vector3.MoveTowards(現在地, 目的地, 移動速度)で目的地まで一定の速度で移動することが出来ます。
このVector3.MoveTowardsをVector3.LerpやVector3.Slerpに変えても少し違った動きをするので場面によっては変えても良いかもしれません。
Vector3.Lerpにすると僕のイメージではUFOのような感じの動きになります。

2Dでこのスクリプトを使う場合はVector3をVector2に変えれば多分OK。

書き終えたら保存してヒエラルキーにあるゲームオブジェクトのMoveFloorにスクリプトをアタッチします。

MoveFloorスクリプトをゲームオブジェクトMoveFloorにアタッチ

インスペクターから今加えたスクリプトのMove FloorにmFloorを入れ、Target PointのSizeを目的地の数に設定し、Elementに先ほど配置した目的地の空のゲームオブジェクトを入れます。

Target PointのSizeを変更して目的地を設定。

これで動く床は完成です!
試しに動かしてみるとこんな感じになります。

動く床完成。

途中動きがカクカクした感じになってるのは僕のPCのスペックが足りてないので動画を撮りながら動かすのがきついからなだけで、実際にはちゃんと動いています。
設定した目的地をちゃんと通って移動しているのが分かると思います。

あとはこのMoveFloorをプレハブにすればOKです!
これで穴の上を移動する床を作ったり高い場所へ移動する床を作ったり出来ますね!

でもこの床にはまだ問題点があります。
それはこの床にキャラクターコントローラーで動かしているキャラを乗せても一緒に移動しないのです。

どういうことかというと次の画像を見てください。

動く床に乗ってもキャラクターは移動しない。

床は動いてるのにキャラクターは床に乗ってもその場から動かずに落ちてしまっていますね。

長くなってしまったのでこの解決方法はまた今度書くことにします。

【Unity】動く床に乗った時、キャラクターも一緒に移動するようにする方法
スポンサードリンク
タグ:JavaScript UNITY
posted by ナオ at 17:37 | Comment(0) | Unityの使い方メモ
2016年10月22日

不死隊をイメージした3Dモデル完成

アケメネス朝ペルシアの不死隊をイメージした3Dモデルを作ってみました。

不死隊は多民族から編成されているので服装も様々だったらしいので、一番具体的に服装が書いてあったメディア人やペルシア人をイメージして作りました。

鉄製の鱗鎧に黒くて薄い布を顔に巻きつけ、槍と木を編んで作った盾を持っていたということなのでこんな感じになりました。

不死隊をイメージしたモデル
ポーズをとらせてみた。

袖の部分にもボーンを入れているので腕を動かすときに結構めんどくさいですw

スポンサードリンク
タグ:兵士
posted by ナオ at 14:57 | Comment(0) | 3D作成記録

【にゃんこ大戦争】ワルプルギスの夜「舞台装置の魔女」攻略しました

魔法少女まどか☆マギカのコラボステージ、ワルプルギスの夜「舞台装置の魔女」をクリアしたのでその時の編成や手順を書きます。

このステージをクリアすると「ちびまどか」をLv20以上で第三形態「ちびアルティメットまどか」に進化できるようになります!

出てくる敵

  • ワルプルギスの夜

インフォメーションにも「ワルプルギスの夜、来襲」とあるので敵の名前はこれで合ってますよね?

攻撃範囲も広く攻撃は必ずクリティカルで強力なので、ほとんどのキャラは1撃でやられてしまいます。
また、にゃんこ砲を撃ってもノックバックしません。
スニャイパーは有効な模様。
とにかく素早く近づいて確実にダメージを与えていきましょう。

編成

  • イチリンリンLv30
  • 武神・上杉謙信Lv13
  • マジでコイしてるLv1
  • ねこウエスタンLv26+5
  • ネコライオンLv20+30
  • 大狂乱のネコライオンLv20
  • ネコ特急Lv1
  • 覚醒のネコムートLv30

にゃんコンボ「バイクツーリング」「カウボーイ」「風車」で移動速度を上げています。

攻略手順

使用アイテム:スニャイパー

  1. 大狂乱のネコライオンを速攻で1体出します。
  2. 敵の攻撃モーションが始まったら大狂乱のネコライオン、ネコ特急、ムートのいずれかを1体出します。
  3. 隙を見て財布レベルも上げます。

敵の攻撃(ビルの絵が出てきたら)に合わせて大狂乱のネコライオンやムートなどの移動速度の速いキャラを出していれば勝てます。
スニャイパーは無くても勝てそうですが、あると生産のタイミングをミスったときに結構助かります。

クリアには15分ほどかかりました(*´Д`)ハァハァ

大狂乱のネコライオンを持っていない場合は「ちびほむら」の配布まで待つのも手かもしれませんね

スポンサードリンク
posted by ナオ at 03:13 | Comment(0) | ゲームプレイ記録