-
最近文字の大きさを少し大きくしてみたは良いものの、
逆にみにくいような気がしてならないんですが皆様の
意見お待ちしております。
さて、
話は本題に入りまして。
プレイヤーの中心からレイを真下に飛ばして
当たり判定を取っていますが、面の法線の逆側
(ポリゴンの裏側)からでもしっかり拾っている
ことが分かりました。あたった場所にテキトーな
モデルを配置することで発見することが出来ました。
しかしながらとても不思議な動きをします。
マップにあったと思ったら徐々にプレイヤーの位置
までモデルが上がってくるのです。
はてな?
例え二つ当たったとしてもどちらかの座標にモデル
が再配置されるはず。ここら辺は良く分からないので
LayerMask機能を使う事にする。
layermaskはただのint型の数値で、
ここにレイヤー番号を入れる事で定めた物しか
衝突しか検知しない様にできる引数みたいです。
これを利用すれば恐らくモデルが中に舞うと言った
現象には悩まされないと見ています。
まぁ、
やってから記事書けよって話なんですけども。
結果は後ほど。PR -
という荒療治を思いついた。
と言うよりはという助言を頂いた。
いや、方法の1つとして
知ってはいたけどもと言うべきか。
結果から言うとカクカクとした動作は
直った。しかしとても重要な問題が。
FixedUpdate()に書いてしまうと固定
FPSになるということ。変更すれば
物理演算も加わるので目に見える
パフォーマンスの低下に繋がると
言う事。
Unityは物理演算を謳っている様に比較的
簡単に扱える仕組みになっている。この
物理演算の処理を軽くするためにUnityは
物理演算用の関数を用意している。
簡単なようで面倒な仕組み。
このままだとFPSの変更をオプションで
変えられない。どうやらスクリプトから
FixedUpdate()の呼ばれる頻度を変えられない
からだ。
う~ん参ったものだ。
-
皆さんご存知Getcomponent()関数って重いですよね。
で、それと同じくtransformも重いんだそうです。
じゃあ予めキャッシュしておけば良いのかといったら
私の場合なぜか改善しなかった。使っている間FPS
は著しく落ち始め、使うのを辞めるとまた元に戻る。
皆さんは一体どう対策をされているんだろうか? -
移動中にカクカクする場面に遭遇。
しかしながらコード的には問題がない様子。
調べてみるとUpdate()のタイミングで描画
しているらしい。しかしPhysic系の計算は
FixedUpdate()周期で計算されてるらしく
update()に書いても意味がない。
ので私はFixedUpdate()に書いているが、
そこで問題。FixedUpdate()はUpdate()
よりも呼ばれる回数が遅い。
と言うことは、Update()で描画している
にもかかわらず、FixedUpdateで物理の
計算をしている訳だから描画に嘘が生じる。
処理よりも描画される回数が多い。
これでは計算する前に描画されてしまう。
私が取った方法はEdit > ProjectSettings >
Time にある、
「FixedTimestep」をUpdateよりも早く
設定する事だった。ただし、これがユーザー
によってFPSを変えられる使用ならそれに
応じてスクリプトから変える必要が出てくる。
とりあえず、様子見である。