前提・実現したいこと
Unity2Dで、「画面上にマウスで線を引いて囲む」という処理をしたいです。
線は、colliderを持った小さな四角形のオブジェクト(以降ラインセルと呼びます)の連結として表現しました。各ラインセルのGameObjectは順番通りにリストに格納して管理しています。[参考]
囲み判定を行う際には、既に描画したラインセルと最新のラインセルとの衝突判定を行う必要があります。
ラインセル全てにRigidbodyやスクリプトを持たせると処理が重くなると考え、マウスポインタの座標に衝突判定用のスクリプトやRigidbodyを持つオブジェクト(画像の丸いやつです。以降ヘッドと呼びます)を配置して処理を行わせることにしました。
発生している問題・エラーメッセージ
しかし、これだと素早く囲んだ場合にヘッドが衝突するべきラインセルをスルーしてしまいます(フレームが更新されて衝突判定が入る前に通り越してしまった?)。
(下記画像)
該当のソースコード
省略します。
試したこと
フレームごとのマウス座標の差分が既定値(線の太さ)より大きかった場合はその部分も衝突判定を見るという処理が最適な気がします。
しかし今回は各ラインセルにスクリプトやRigidbodyを持たせたくないため、
Physics2D.IsTouching([飛ばしすぎた部分],[other])
でotherを他のすべてのラインセルで総当たりしないといけない気がします。これは重そうなので避けたいです。
colliderを引数で1個指定して衝突されていたらtrueを返す、というような関数があれば良いのですが…
補足情報(FW/ツールのバージョンなど)
C#
Unity 2019.3.3f1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/28 01:52