プロフィール

はーさん

Author:はーさん
1人創作チームDeadMan'sSunのボスです。
Twitter→@Ha_Shok_ko

TERA HITO:Revolutionを作りました。よろしく頼むぜ、兄弟!
・ふりーむ!のTERAのページ(exe形式公開場所)へ
・UnityRoomのTERAのページ(WebGL版公開場所)へ

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム
QRコード
QR

私のアイランド


--/--/-- --:-- はーさん

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2015/07/09 19:45 はーさん

Navmeshのこと(続編)


GangplankでRivenに勝てました。

さてはてはてさて、二日の更新の空きがありまして、さっそくダメじゃんコイツ!と言われそうなブログであります。
今になって己の無知さを知りビビっております。
今日も備忘録書いてまいります。


Navmeshの関数とかの話

pathについて調べました。
調べている最中に、pathを使った目的地までの距離を計測する方法を掲載しているサイト様がございました。

Unityメモ NavMeshAgentでターゲットまでの距離を求める

そこでまずNavMeshPathという型宣言と経路パスの代入、それからPath.Corner[i]という記述を見つけました。
経路の探索なので、当たり前と言えば当たり前のことだったんですが、このNavMeshPath型で宣言した変数にはおそらくオブジェクトの移動のためのパス情報が配列的なもので格納されているっぽいです。
ちなみにこのCornerには未踏破、つまりはまだ行ってないPathの情報が格納されているとか、なんとか。

新しい経路の割り当ての方法としてはいくつか出てますね。
有名なのが「NavMeshAgent.SetDestination」ですね。
これは引数に目的地の座標を上げるだけで、あとは勝手にPathを作って勝手に動いてくれます。
こんな感じで。

NavMeshAgent.SetDestination(target.transform.position);

これでtargetのポジションまで移動してくれます。
すげぇ!ほかの方法いらなくね?
もしかすると色々勝手にしてくれるという代償として負荷があるのかもしれません。Maybe。

次はちょっと長たらしくなりますけど

NavMeshAgent nMA;
NavMeshPath path = new NavMeshPath();
nMA.CalculatePath(Target.position,path);
nMA.SetPath(path);


こんな感じのもの。

一行目は変数の宣言です。NavMeshAgent型の。
どっかでGetComponentなりでNavMeshAgentを取得しないといけませんぬことをお忘れなくんぬ。

二行目に、NavMeshで使うpathを保存するためにNavMeshPath型の変数を宣言して、newとしてNavMeshPath関数を呼び出して、引数を何もなしにして空っぽを入れます。

三行目はpathの計算をして、できたPathを保存するものです。
第一引数に目標の座標。Vector3です。で、第二引数には計算して出たPathを保存するpathをセット。

四行目のSetPath関数は、オブジェクト(NavMeshAgentがセットされている前提)にPathを渡して実際に動いてもらうものです。

果たして、こっちのほうがSetDistinatiionよりも軽かったりするのでしょうか・・・?
真相やいかに。
今度調べておきます。

それとNavMeshAgnetのCaliculatePathNavMeshのCaliculatePath引数とかその他諸々が違うようです。
と、いうかNavMeshのAgnet付きと付かないヤツとで違いが存在するのは気になるところです。
これも調べておきます。
(調べたらどんどん調べることが出てくるなぁ)

あとは謎の存在であるMoveを使う方法なんですけどテラシュールウェアさんがもうすでにやっておりました。

テラシュールウェア マップから落ちないようにステージ上を歩かせる楽な方法

Moveってどういうときに使うのが良いんでしょうね。
やっぱSetDistinationよりも処理が軽いとかそういうのなのかなぁ。うーん。


それから、移動を止める方法はStop関数というのがあることも分かりました。

NavMeshAgnet.Stop();

こんな感じで書いてあげて使うようです。
返却値はtrue or false・・・だったはず。Maybe。
ただ、このStop関数は、使えばその場で、すぐに止まる優れものなんですけど、使うと再開してね、って言うまで止まったまんまです。
一時停止みたいなものらしい。ポーズ的な。
そりゃあスタートボタンもっかい押さないと動かないわな。
そして再開するのはResume関数という輩。

NavMeshAgent.Resume();

こいつを使うと、ストップしていた動きを再開してくれるそうです。
動きの再開はストップさせていたとこから。


また少しNavMeshくんとのユウジョウがディープにビルドされたんじゃないかと思われます。
ウォーターフォール的な。(意味分かって使ってません。)

新しいことが分かれば、また更新します。
分からないことだらけなんで、ぶっちゃけほとんど新しいことばっかですけども。

スポンサーサイト
作るゲームの話 | ホーム | Navmeshのお話
Comment


Trackback
この記事のトラックバックURL
http://watasinoilands.blog.fc2.com/tb.php/48-c6d345cd
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。