第7回では移動処理を実装しました。
厳密に言うとRigidbodyを割り当てているので、あれも重力の影響を受けているのですが、私の作っているRPGを見ると、別のやり方をしていました。
少し巻き戻る部分も出てきますが、そちらの方が何かと都合がいいので、やり方を変えさせて頂きます。
そのやり方はRigidbodyではなく、Character Controllerを使います。
キャラクターを選んで、Add Component → Pyhisics → Character Controllerを選びます。
以前割り当てていたCapsule ColliderとRigidbodyは不要なので、削除して下さい。
下図のようになればOKですが、赤枠部分は皆さんのキャラクターに応じて変更して下さいね。

Capsule Colliderと同じ感じで、スライムだとこんな風になります。

で、スクリプトは下記のものに差し替えを。
--------------------------------------------------------------------
using UnityEngine;
using System.Collections;
public class Move : MonoBehaviour {
float rotateSpeed = 5F; // 回転する速度
float moveSpeed = 10F; //移動する速度
Vector3 velocity; //移動量
float gravity = 10000F; // ここで重力を決める
private CharacterController character;// キャラクターコントローラーを取得
void Start () {
character = GetComponent
();
}
// Updateは毎フレーム呼ばれる関数
void Update () {
float v = Input.GetAxis("Vertical"); // 上下のキー入力を取得
float h = Input.GetAxis("Horizontal"); // 左右のキー入力を取得
if (character.isGrounded) {
transform.Rotate(0, h * rotateSpeed, 0); // 左右のキー入力でキャラクタを旋回する処理
transform.Translate(0, 0, v * moveSpeed );// 上下のキー入力でキャラクタを移動する処理
}
velocity = transform.TransformDirection(velocity); //velocityに座標を設定?
velocity.y -= gravity * Time.deltaTime; //重力を割り当て
character.Move(velocity * Time.deltaTime); //実際に移動させる処理
--------------------------------------------------------------------
分かる範囲でコメントを書いておきましたので、興味のある方は参考にして下さい。
Character Controllerだとcharacter.isGroundedという命令が使えます。
これは地面に設置しているかの判定を行うものです。
つまり、上記スクリプトだと地面に居る時だけ、移動処理が行われることになります。
設定はこれだけです。
動かしてみましょう。

前みたいにキャラが空を飛んだりとかいうことはなくなりました!
カクついているのはgifの問題ですw
float gravity = で重力量を決められますが、ある程度ないと動きが変になると思います。
今回はここまでですが、これで準備が整いました。
次はいよいよBlenderで作ったモーションを割り当てる処理に入りますので、歩くモーションを作っておいて下さいね。
Blenderでは移動させず、その場で足踏みする感じのやつです。
それでは、次回をお楽しみに。
- 2014/02/26(水) 20:11:33|
- Unity
-
| トラックバック:0
-
| コメント:0