unityで3Dオブジェクトをちゃんと歩かせる

前回まででオブジェクトのサイコロを地面に立たすことには
成功したのですが、歩かせようとすると
地面につまづいて転倒し体を回転させながら吹っ飛んで行くという
見事な歩行術を見せてくれたのでした。

こんなにすぐコケるのでは話にならないので
調べてみるとすごい簡単な解決策がありました。


Rididbody のインスペクタープロパティの
Constraints→ Freeze Rotation のXYZにチェックを入れる。
たったこれだけのことで


あのサイコロくんが安定感抜群の歩行を開始したのです。ヘ(゚∀゚*)ノ
苦労して車輪のようなコライダーを付けたのがアホみたいです。

次はこのサイコロをカメラに追いかけさせて
視界から消えないようにしたいと思います。
オブジェクトを追いかけるカメラの設定方法は
前に忍者アクションゲームでやったのでそれを流用します。
↓この記事

Unityでアクションゲームのカメラを動かす

プロジェクトビューで右クリック→Create→C#Script
名前をCameraMoveにしました。

//——————————————
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraMove : MonoBehaviour
{

GameObject ninja; //ゲームオブジェクト型変数ninjaを宣言。

// Use this for initialization
void Start()
{
this.ninja = GameObject.Find(“saikoro”); //saikoroオブジェクトを見つけて代入。実体化。

}

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

//playerposに現在のサイコロのx,y,z座標を代入
Vector3 playerpos = this.ninja.transform.position;

//サイコロの動きに合わせてカメラの座標を更新する。サイコロの後方から撮影するためz-10にしている。
//zのままにするとサイコロより前面を映すのでパイロットのコックピットのような映像になるのでこれはこれで使えそう。
transform.position = new Vector3(playerpos.x, playerpos.y, playerpos.z-10);
}
}
//——————————————

書けたらヒエラルキービューのMain CameraにD&Dでアタッチします。
実行してみよう!


おおー
サイコロをカメラが追いかける迫力の映像だ!(・∀・)

しかしどこまでも加速するのですぐに地面の端まで行ってしまうな。
カーレースゲームではええかもしれんけど
もっと普通に歩かせたいのですよ。
速度制限するようにスクリプトを書き換える。

//———————————————————–
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SaikoroMover : MonoBehaviour {

float power = 50.0f; //サイコロを動かすのに加える力。パワー。
float maxSpeed = 7.0f; //最高速度を指定して速度制限。これをしないとずっと加速し続ける。

// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
float walkSpeed = Mathf.Abs(this.GetComponent().velocity.z); //歩く速度を計測。
if (walkSpeed < this.maxSpeed) //歩く速度(walkSpeed)が最高速度(maxSpeed)を超えないなら力を加えて加速させる。 { this.GetComponent().AddForce(transform.forward * 1 * this.power);
}
}
}
//———————————————————–

書けたら実行するぜ! ^0^


あ~ これこれ
やっと思い通りにサイコロくんを歩かせることができましたよ!
感無量です (*^▽^*)

////////////////////////////////////////
ー広告ー



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です