2Dで懐中電灯のようなライトを表現する
はじめに
2Dゲームで懐中電灯のようなライトを表現してみたかったのでやってみました。
私の力量不足で詳しい説明には至りませんでしたが、ご了承ください。
内部コード
playerTransformに、ライトを持たせたいオブジェクトのTransformをアタッチしてください
meshFilterに、自身にアタッチされているMeshFilterをアタッチしてください。
(事前にオブジェクトにはMeshFilterと、MeshRendererをアタッチしておいてください)
gistfb3ed34426f8975e2f0aa21141749b4d
おおまかな実装の方針
1,rayを飛ばす
rayをプレイヤーの向いている方向を中心として、扇状に複数飛ばします。
2,Meshの説明
Meshと呼ばれる機能を利用します。
Meshには、「頂点の位置の設定」と、「どの頂点が一つの三角形の頂点の組であるか」の設定が必要です。
以下のページの説明が分かりやすかったです。
http://web.wakayama-u.ac.jp/~tokoi/unity_mesh.pdf
3,rayとMeshの利用
飛ばした複数のrayを走査します。
障害物にrayが当たったときは、その当たった位置を頂点とします。
一方で、障害物にrayが当っていないときはrayの先端を頂点とします。
また、すべての三角形は、「プレイヤーの位置」を一つの頂点として持っています。
これらの「頂点の位置」そして「三角形を成す頂点の組み合わせ」の情報をmeshに毎フレーム代入することで、動的にmeshを変形させることができます。
終わりに
お疲れ様でした。
実装について詳しく説明することができなかったのは申し訳ないです、、
今回のような「課題と解決」も今後は紹介していければと思っています。
ありがとうございました。
2023/06/13 : 不具合の調整