ぱすぴえのブログ( ゚д゚ )

  ※SKYRIMのプレイ記やMOD作成記などです

MOD作成の記録(ほぼ失敗談)です( º‿º )


●CKの初歩・オリジナル武器・オリジナルアクティベータなど
 →建設日誌

●メッシュ弄り・装備作成・新規魔法など
 →シャドウさんでプレイしたい!
 →ミンウさんでプレイしたい!
 →ガーランドさんでプレイしたい!

●パッケージの設定
 →働くNPC

●馬車・SS撮影など
 →CKでやってみた

●モーション・新家具・召喚・クエストの追加
 →英才教育

●妄想満載漫画風SS
 →Dawnguard妄想プレイ記 (作成中)
 →SKYRIM妄想SS

テーマ:
Blender奮闘記という見出しでBlenderを使っていきます。
目的はUnityのゲームに導入するキャラクターを作るためです。


今年はBlenderでそれなりのものを作れるようになるという目標がありますので記事を書いていきます(^◇^)

▲実はこれで胴体がほぼ完成です。この時点で話し相手が誰か分かった方は天才(^◇^)
この洋ナシのようなだらしないボデーは誰のものでしょうか?



足が生えてきました。

▲ミラーコピーって便利ですね!私はまだまだそんなBlenderレベルなのです...
ところでBlenderをについてwebで調べていると、大概皆さん英語環境で作業されているので私の日本語環境だとどの項目に当たるのかわからないことがよくあります(◎_◎;)



手が生えてきました。

▲腕ができました(ハッピーターンじゃないよ)
腕はウェイトの設定の際に脇を広げた状態に変更します。




顔の大枠を作っていきます。

▲ドラ〇もんのような2頭身。これでもまだ誰なのかわかりませんね。
全体の大枠ができました。
次はもっと細かいパーツの鼻や、目のくぼみや耳、翼などをつけていきます。(^◇^)


 
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
最近の画像つき記事  もっと見る >>

テーマ:
今回は以下の修正と追加を行います。

 ①待機モーションの修正
 ②走るモーションの追加


まずは待機モーションの修正です。
じっと見ていると違和感が半端なかったためです。

▲よく見ると動いてるのがわかるくらいの感じ
待機モーションは最初に作ったアニメーションとはいえちょっと適当過ぎました(◎_◎;)
 ・上半身をわずかに上下する
 ・上半身をわずかに前後にゆらす
 ・脇と手のひらをわずかに開いたり閉じたり
これをするだけで呼吸しているっぽくなります。


次に走るモーションの追加です。
原作のかわいさには遠く及ばないですが、こんなかんじでしょうか。

▲走るときは手をグーにしたほうがいいのかなぁ・・・
次に歩くモーションとのすみわけですが、これはほかのゲームを参考にしましょう。
3Dゲームでよくある(気がする)のは次の二つですよね。

  ・ 基本は走り。スティックの倒しを小さくすると歩く。
  ・ 基本は走り。ダッシュボタンを押しながら移動するとさらに早くなる。

今回は前者のみで実装してみます。


アニメーションさえできてしまえばAnimatorを設定するだけです。

▲「待機」<->「走る」だけでなく、「歩く」<->「走る」の遷移もあることを忘れずに。
「待機」<->「走る」は、入力方法の関係上遷移することは多分ないですが一応設定しています。
キーボードで実装する際は使うかもしれません。(今回はゲームパッドのみです。)


そしてスクリプトに走るか歩くかの判定を追加。
移動スピードも場合分けしましょう。
 
using UnityEngine;

public class PlayerControlScript : MonoBehaviour
{
    private float counter_sec;
    private Animator animator;
    private GameObject player_camera;
    double input_offset = 0.1;
    public float run_speed = 1.0f;
    public float walk_speed = 0.2f;
    public float run_border = 0.7f;

    void Start()
    {
        player_camera = GameObject.Find("playerCameraRig");
        animator = GetComponent<Animator>();
    }

    void Update()
    {


        // キャラクターに走るモーションを実行させる
        //  ※操作感のため、input_offset分の入力を無視
        if (Mathf.Abs(Input.GetAxis("Horizontal")) >= input_offset || Mathf.Abs(Input.GetAxis("Vertical")) >= input_offset)
        {
            // 進行方向をカメラに合わせて指定する
            Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            transform.LookAt(transform.position + Quaternion.Euler(0, player_camera.transform.eulerAngles.y, 0) * direction);


            // 走ると歩くの場合分け
            if ( Mathf.Abs(direction.x) > run_border || Mathf.Abs(direction.z) > run_border)
            {
                print(direction);
                transform.position += transform.forward * run_speed;
                animator.SetBool("is_running", true);
                animator.SetBool("is_walking", false);
            }
            else
            {
                print(direction);
                transform.position += transform.forward * walk_speed;
                animator.SetBool("is_walking", true);
                animator.SetBool("is_running", false);
            }

            counter_sec = 0.0f;
        }
        else
        {
            animator.SetBool("is_running", false);
            animator.SetBool("is_walking", false);
        }

    }
}

これで移動方法に「走る」が追加されました。
なお、今後はビビのメッシュを手直しすることを考慮し、アニメーション作成は控えようと思います。(おそらくごっそり修正し、作り直すことになると思うので。)


ひとまずこれで移動手段をつくって、ゲームの動作確認ができるようになりました。
次回からは話相手を作っていきます。
 
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:

④アニメーションの遷移構造

ゲーム内で移動する仕組みをつくったので、あとはそれに合わせてアニメーションを再生するだけです。(^◇^)

 

 

以前待機モーションを導入した時と基本的には一緒です。

ただしモーションの再生に条件があるので、スクリプトと合わせての修正が必要です。

▲キャラクターが移動している時だけ「歩く」モーションを再生させる仕掛けをつくります。

以前の記事で手順についてあまり触れていなかったので、待機モーションの設定と合わせてご紹介します。

 

 

 ①Animator画面で右クリック -> CreateState -> Emptyを選択(2つ作りましょう)

  

 

 ②名前をwalkとidleにし、それぞれのMotionにアニメーションを参照します。

  

 

  ③Stateで右クリックし -> Make Transitionを選択。お互いをつなぎましょう。

  

 

 ④AnimatorのParametersタブの「+」をクリックし、Bool変数を追加します。

   変数名はスクリプト内で使うので、使いやすい名前にしましょう。(is_walkingにしてます)

  

 

 ⑤Make Transitionで引いた矢印をクリックし、Conditionの「+」をクリックします。

   「idle」 -> 「walk」の矢印を is_walking = true に

   「walk」 -> 「idle」の矢印を is_walking = false にします。

  

  

  ⑥Has Exit Timeのチェックを外しましょう。

 

なんか画像が見づらいですが、きっとどこかにわかりやすい説明動画とかあると思います(投げやり)

 

 

次にスクリプトを修正します。

修正点はAnimatorの参照と、移動に合わせてのBool変数変更です。

 

using UnityEngine;
public class UnityControlScript : MonoBehaviour
{
    private Animator animator;  // ★追加
    private GameObject player_camera;
    double input_offset = 0.1;
    public float run_speed = 1;

    void Start()
    {
        player_camera = GameObject.Find("playerCameraRig");
        animator = GetComponent<Animator>();    // ★追加
    }

    void Update()
    {
        // 入力制限を見る
        // キャラクターに走るモーションを実行させる
        //  input_offset分の入力を無視
        if (Mathf.Abs(Input.GetAxis("Horizontal")) >= input_offset || Mathf.Abs(Input.GetAxis("Vertical")) >= input_offset)
        {
            // 進行方向をカメラに合わせて指定する
            Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            transform.LookAt(transform.position + Quaternion.Euler(0, player_camera.transform.eulerAngles.y, 0) * direction);

            transform.position += transform.forward * run_speed;
            animator.SetBool("is_walking", true);   // ★追加
        }
        else   // ★追加
        {
            animator.SetBool("is_walking", false);
        }

    }
}

 

 

実際に動かしてみるとこんな感じになりました。

▲アニメーションの再生速度と、移動距離を丁度いい具合に調整しましょう。

行動パターンが「歩く」と「止まる」だけでは少しさびしいので次回はもう少しバリエーションを増やしたいと思います。

AD
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:

②ユーザーの入力に合わせてキャラクターを移動させる

次はUnityとソースエディタでの作業になります。

同じような記事はWeb上にたくさんありますが、気にせずやってみましょう(@_@)

 


ゲーム内でキャラクターを動かすにはスクリプトを作る必要があります。
Unityで使えるスクリプトは「C#」と「JavaScript」の二つになります。

▲私はC#を使っていますが、勉強したことがないので若干あやしいです。

基本的には好きなほうを使えばよいと思いますが、3Dゲームを作る場合Web上で参考にするページにはC#で書かれているものが多い(気がする)ので、どちらでもいいという方はC#をオススメします。
 


早速スクリプトを作ってみました。
操作感としては、モンスターハンターのようなイメージです。

以下スクリプト例です。
using UnityEngine;

public class PlayerControlScript : MonoBehaviour
{
    private GameObject player_camera;
    double input_offset = 0.1;
    public float run_speed = 1;

    void Start()
    {
        player_camera = GameObject.Find("playerCameraRig");
    }

    void Update()
    {
        // キャラクターに走るモーションを実行させる
        //  ※操作感の調整のためinput_offset分の入力を無視
        if (Mathf.Abs(Input.GetAxis("Horizontal")) >= input_offset || Mathf.Abs(Input.GetAxis("Vertical")) >= input_offset)
        {
            // 進行方向をカメラに合わせて指定する
            Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            transform.LookAt(transform.position + Quaternion.Euler(0, player_camera.transform.eulerAngles.y, 0) * direction);

            transform.position += transform.forward * run_speed;
        }

    }
}
これをキャラクターのオブジェクトに追加しましょう。


これだけでは動きません。
playerCameraRigという名前のカメラを基準に移動方向を決めているためです。
キャラクターカメラの追加と、カメラ用のスクリプトも作りましょう。


③移動するキャラクターに合わせてカメラを動かす

カメラを追加します。プレイヤースクリプトに合わせた名前にしましょう。
今回はplayerCameraRigという名前にしています。

▲固有名にすると汎用性がなくなるので、あまりよくないやり方です・・・
これでカメラの映像を基準にキャラクターを動かすというしくみができました。


キャラクターを移動するスクリプトを入れて動かしてみるとこんな感じです。

▲ウィーン
カメラをキャラクターに追従させる仕組みがないため、固定カメラになっています。
キャラクターに合わせてカメラを動かすようにしましょう。



以下スクリプト例です。

using UnityEngine;
using System.Collections;


public class PlayerCameraControl : MonoBehaviour
{
    Vector3 targetPos;
    Vector3 Camera_X_axis;
    public Transform target;
    public double input_offset = 0.5;
    public bool Camera_reverce = true;
    public float Camera_speed = 2;
    private int Camera_culc = 1;
    public double Under_line = -0.5;
    public double Upper_line = -10.1;


    void Start()
    {
        targetPos = target.transform.position;

        // カメラのY軸反転変数を生成
        if( Camera_reverce )
        {
            Camera_culc = -1;
        }
        else
        {
            Camera_culc = 1;
        }

    }

    void Update()
    {
        // targetの移動量分、自分(カメラ)も移動する
        transform.position += target.transform.position - targetPos;
        targetPos = target.transform.position;

        // カメラの正面ベクトルを取得
        Vector3 Camera_Forword = targetPos - transform.position;

        // 正面の垂直ベクトルを計算
        Camera_X_axis = new Vector3( -Camera_culc * Camera_Forword.z, 0, Camera_culc * Camera_Forword.x );

        // 横方向のカメラ移動
        if ( Mathf.Abs( Input.GetAxis("Horizontal_Camera") ) >= input_offset )
        {
            transform.RotateAround( targetPos, Vector3.up, Input.GetAxis("Horizontal_Camera")*Camera_speed );
        }

        // 縦方向のカメラ移動
        if ( Mathf.Abs( Input.GetAxis("Vertical_Camera") ) >= input_offset )
        {
            // カメラ稼働範囲以内か?
            if ( Camera_Forword.y < Under_line && ( Camera_culc * Input.GetAxis("Vertical_Camera") >= input_offset ) )
            {
                transform.RotateAround(targetPos, Camera_X_axis, Input.GetAxis("Vertical_Camera"));
            }
            if (Camera_Forword.y > Upper_line && ( Camera_culc * Input.GetAxis("Vertical_Camera") <= input_offset ) )
            {
                transform.RotateAround(targetPos, Camera_X_axis, Input.GetAxis("Vertical_Camera"));
            }
        }
    }
}
これをカメラのオブジェクトに追加しましょう。


※Inspector画面のpublic Transform targetにキャラクターを指定してあげましょう。

▲キャラクターに合わせてカメラが動きます。カメラも動かせます。
これでキャラクターを移動させる仕組みができました。
ここにアニメーションを再生させる仕組みを加え、歩いているようにみせましょう。

(続く)
 
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:

Unityでキャラクターを動かすのは、3Dゲーム作成の最初の一歩です(^◇^)

一個一個クリアしていきましょう。

 

 

キャラクターを動かす仕組みを作るにあたって、以下の機能をつくる必要があります。

 

 ①キャラクターのアニメーション

 ②ユーザーの入力に合わせてキャラクターを移動させる

 ③移動するキャラクターに合わせてカメラを動かす

 ④アニメーションの遷移構造

 

順に作っていきましょう。

 

 

 

①キャラクターのアニメーション

前回は上半身を揺らすだけでしたが、今回は歩くモーションです。

八頭身のイケメンがバッタバッタ敵をなぎ倒す痛快アクションゲームを作るわけではないので、単純なアニメーションにしましょう。(というかそれしか作れないので・・・ToT)
最終的に何を作るかでアニメーション作成の難易度はゴリゴリに変わります。

▲アニメーション作成・・・これは気合と妥協でなんとかしましょう(ぇ)。

※キャラクターとアニメーションを作るのが面倒だけど、キャラクターを動かしたい!という方は

 「”Unity-chan!”Model 」というAssetsを使いましょう。

 


左右対称なアニメーションを作る場合、「X axis mirrored (Ctrl + Shift + v)」という便利な機能がありますので、ちょっと楽に作れるはずです。

▲X axis mirrored失敗の図。楽しそうで何よりです。

 ①-1)右足を前に出しているポーズを作る

 ①-2)10フレームほどずらして、①-1)をX axis mirroredでペースト(左足が前のポーズが完成)

 ①-3)10フレームほどずらして、①-1)をコピーする(ループが完成)

 ①-4)各ポーズ間を微調整する

でそれなりなアニメーションを作りましょう。

 

こう見るとポーズを一個作ってあとはコピーと微調整でなんとかなるもんですね。

まぁ微調整が難しいいんですけども。

 

 

 

ビビは膝のボーンがないのでちょっと楽・・・な反面リアルさを追求するのは難しいです。

▲今日はこのくらいで妥協勘弁してやろう!

回転だけでなく位置も調整すればもっとリアルなモーションになると思います。

出来上がったらUnityに導入しましょう。

 


(続く)

いいね!した人  |  コメント(0)  |  リブログ(0)

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。