"自作ゲーム"カテゴリーの記事一覧
-
残念ながら前回の記事は嘘と言う事になる。
実際レイヤー番号を入れてみたものの全く反映
されている気配が無かったのだ。
結果から言うと成功。
ただしやり方が違っていた。このレイヤーのID?
を取得するにはビット演算という多少面倒な事を
しないと取得できないらしい。しかしそんなものは
必要なくとても簡単な方法があったので書き留めて
置く。そしてそのコードを書いてくださった方、
本当にありがとう。
クラスのメンバに「public」としてLayerMask型を宣言
してやる。これだけ。後はこのスクリプトをアタッチ
しておけば現在のレイヤーが選べるようになっている。
一番下にあるように「Mask」という項目が追加される。
「Maskは」自分のつけた変数名になるのでそこは注意。
スクリプトにいったん戻り
レイヤーマスクの引数にこの変数を添える。私は
そのままでも反映の確認が取れたが、メンバとして
.valueを付けるとの事。今度こそ反映されるはずだ。
是非やってみて欲しい。
私はこれで余計な当たり判定に悩まされずに済んだ。
カクカクしたボックスの挙動もスムーズになった。
とりあえず一歩前進である。
PR -
最近文字の大きさを少し大きくしてみたは良いものの、
逆にみにくいような気がしてならないんですが皆様の
意見お待ちしております。
さて、
話は本題に入りまして。
プレイヤーの中心からレイを真下に飛ばして
当たり判定を取っていますが、面の法線の逆側
(ポリゴンの裏側)からでもしっかり拾っている
ことが分かりました。あたった場所にテキトーな
モデルを配置することで発見することが出来ました。
しかしながらとても不思議な動きをします。
マップにあったと思ったら徐々にプレイヤーの位置
までモデルが上がってくるのです。
はてな?
例え二つ当たったとしてもどちらかの座標にモデル
が再配置されるはず。ここら辺は良く分からないので
LayerMask機能を使う事にする。
layermaskはただのint型の数値で、
ここにレイヤー番号を入れる事で定めた物しか
衝突しか検知しない様にできる引数みたいです。
これを利用すれば恐らくモデルが中に舞うと言った
現象には悩まされないと見ています。
まぁ、
やってから記事書けよって話なんですけども。
結果は後ほど。 -
という荒療治を思いついた。
と言うよりはという助言を頂いた。
いや、方法の1つとして
知ってはいたけどもと言うべきか。
結果から言うとカクカクとした動作は
直った。しかしとても重要な問題が。
FixedUpdate()に書いてしまうと固定
FPSになるということ。変更すれば
物理演算も加わるので目に見える
パフォーマンスの低下に繋がると
言う事。
Unityは物理演算を謳っている様に比較的
簡単に扱える仕組みになっている。この
物理演算の処理を軽くするためにUnityは
物理演算用の関数を用意している。
簡単なようで面倒な仕組み。
このままだとFPSの変更をオプションで
変えられない。どうやらスクリプトから
FixedUpdate()の呼ばれる頻度を変えられない
からだ。
う~ん参ったものだ。
-
皆さんご存知Getcomponent()関数って重いですよね。
で、それと同じくtransformも重いんだそうです。
じゃあ予めキャッシュしておけば良いのかといったら
私の場合なぜか改善しなかった。使っている間FPS
は著しく落ち始め、使うのを辞めるとまた元に戻る。
皆さんは一体どう対策をされているんだろうか?