Giter Club home page Giter Club logo

navmeshwalker's Introduction

NavMeshWalker

NavMeshAgentの歩き方をCharacterControllerで制御します。

前提

  • Unity2017.3以降で動作確認

ライセンス

SDユニティちゃん

本リポジトリーに含まれるSDユニティちゃんのモデルは、ユニティちゃんライセンスで提供されています。

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

その他のスクリプトやデータについて

MIT License

Copyright (c) 2018 Yu Tanaka


サンプルの実行方法

こちらでWebGLのデモを試せます。

マウスでユニティちゃんを移動させたい先の床を指します。クリックは不要です。

Unityで試す場合は、ScenesフォルダーのSampleSceneをダブルクリックして開いてPlayします。

組み込み方

プロジェクトへの組み込み方です。おおよそ、以下のような流れです。

  1. パッケージのダウンロードと組み込み
  2. NavMeshをベイク
  3. NavMeshWalkerの設定
  4. 指定の場所を設定するスクリプト
  5. キャラクターを差し替える
  6. アニメーションの設定

組み込みたいプロジェクトを開いた状態で作業をします。

1. パッケージのダウンロードと組み込み

歩かせるゲームオブジェクトのプレハブを組み込みます。

  • Releasesページから、最新版のNavMeshWalker.?.?.?.unitypackageをダウンロードします
  • プロジェクトにインポートします

2. NavMeshをベイク

移動ルートを作成するためのNavMeshをベイクします。手順は以下の辺りが参考になると思います。

SDユニティちゃんを使う場合、以下ぐらいの設定が丁度よさそうでした。

SD Unitychan Setting

ベイク結果は以下のような感じです。

Bake result

ベイクしても水色のゾーンが作成されていない場合、足場がNavigation Staticになっていない可能性があります。Static設定するのが手っ取り早いです。

static

3. NavMeshWalkerの設定

歩かせるゲームオブジェクトのプレハブNavMeshWalkerをシーンに配置します。

  • Projectビューで、NavMeshWalker/Prefabsフォルダーを開きます
  • NavMeshWalkerプレハブを、シーンかヒエラルキーにドラッグ&ドロップして、配置します

Playを開始すると、マウスで指した場所に、SDユニティちゃんが歩いていくようになります。

キャラクターが歩く速度や、旋回速度は、NavMeshWalkerの以下の項目で調整できます。

NavMeshWalker Setting

項目 内容
Walk Speed 歩く速度。大きくすると速くなります。
Angular Speed 旋回する時の角速度です。大きくすると速くなります。
Turn Angle 目的地がこの角度よりずれている場合、移動せずにその場で方向転換します。
Turn Angular Speed その場で方向転換する時の回転速度です。大きくすると速くなります。
Speed Down Distance 目的地がこの距離より近い場合、旋回角度の大きさに応じて歩きを遅くします。
Stop Distance 目的地がこの距離以内の場合は到着とみなします。
Speed 2 Anim 移動速度とアニメーションの速度を調整します。大きくすると、移動速度に対して、アニメーションが速くなります。
Stop Speed 移動がこの速度より遅くなったら、アニメーションを立ちアニメにします。
Average Speed アニメの速度を平均化するための係数。細かく旋回する時に立ち絵が挟まると不自然になるので、この値でこれまでの速度と新しい速度を平均化します。

キャラクターが登れる斜面や段差については、Character Controllerで設定します。Character Controllerについてはこちらの公式マニュアルを参照ください。

4. 指定の場所を設定するスクリプト

マウスで指した場所に移動する動きの解除方法

デフォルトのNavMeshWalkerには、マウスで指した場所に移動を設定するデモのためのMouse Click Targetスクリプトが設定されています。

Mouse Click Target

この動作が不要になったらRemoveして下さい。

スクリプトで移動先を設定する方法

スクリプトから移動先を設定する方法です。

  • 座標を設定するためスクリプトの冒頭で、以下のusingを追加します
using AM1.Nav;
  • アタッチしたスクリプトに、NavControllerを保持する変数を宣言します。ここに、UnityのインスペクターでNavMeshWalkerをドラッグ&ドロップするなどして、指示先のインスタンスを設定します
public NavController Target;
  • 座標を設定するのは、TargetSetDestination()メソッドに、目指す座標を渡します
Target.SetDestination(target);

これで、スクリプトから移動先を制御できます。

目的地に到着しているかは、以下で確認できます。

if (Target.IsReached) {
    // 到着している
}

スクリプト例

こちらに、オブジェクトをクリックしたら、設定された場所にNavMeshWalkerオブジェクトを向かわせるスクリプトの例があります。

5. キャラクターを差し替える

キャラクターを差し替える手順です。デフォルトのNavMeshWalkerオブジェクトは、子供にSDユニティちゃんのプレハブを持っています。

player object

  • 差し替えたいキャラクターを同じように子供にして、SD_unitychan_humanoidは削除します

change model

  • モデルの座標を0, 0, 0にして、奥を向くように回転を調整します

Set Transform

  • Animatorコンポーネントをアタッチして、Controllerにアニメーターデータを設定します。サンプルとして、SDユニティちゃんのアニメデータを利用した簡単なものをAnimations/NavMeshWalkerに用意してあります

Set Animator

スクリプトで移動を制御する場合、Apply Root Motionが悪さをする場合があるので、チェックを外しておくとよいでしょう。問題が起きたらチェックを戻してください。

  • SDユニティちゃんのアニメを利用する場合、表情変更のイベントを受け取る必要があります。エラーが出ないようにスタブメソッドを定義したFaceCatcher.csを用意したので、Demo/Scriptsフォルダーから、Animatorコンポーネントをアタッチしているオブジェクトにドラッグ&ドロップしてアタッチします

Set Face Catcher

以上で差し替え完了です。

Changed Chr

6. アニメーションの設定

サンプルのアニメーターは以下のようなシンプルなものです。

Animator

このうち、サンプルではStandingWalkingしか使っていません。

サンプルのAnimatorを利用する場合

Animatorはそのまま利用して、Animationを他のものに差し替えるには、Animatorの各状態に設定されているAnimationを変更してください。

  • Animatorウィンドウで差し替えたい状態を選択します

Select Status

  • InspectorMotino欄に、変更したいアニメーションをドラッグ&ドロップします

Set Animation

これでアニメーションのみを差し替えることができます。

独自でAnimatorを作る場合

Animatorを変更したい場合は、Float型のSpeedパラメーターを定義してください。

Speed

スクリプトから、このパラメーターにキャラクターの移動速度を渡しています。この値を使ってStandingWalking、必要ならRunningを切り替えるようにしてください。

制約

本来、NavMeshAgentは他のエージェントを回避するのですが、現在はパスを辿るだけなので、他のエージェントを回避しません。回避の必要性はnextPositionを確認することで把握できると思われますので、必要な場合は改良してください。

NavMeshAgentは常に着地して移動するようになっているため、ジャンプや落下はできません。それらをやりたい場合は、着地しているかを判定して、空中の時はNavMeshAgentを無効にして、着地したら有効にするような制御が必要になります。

また、到着判定でY値を無視するようになっているので、立体交差があるようなマップだと正常に到着が判定できない可能性があります。

不具合報告

不具合がありましたら、Issuesにご報告いただければ幸いです。

参考・関連URL

navmeshwalker's People

Contributors

am1tanaka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

navmeshwalker's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.