ダーク/ライト切り替え

UNITYで扇形を作ってみた

投稿日2021-06-28

Picture of the logo


目次

目次を読み込み中...

# 扇形のギズモとは?

demo

視界や索敵範囲などを表すために扇形のギズモを用いることがよくありますが、自分の知る限りUnityの標準機能で直接扇形のオブジェクトを作り出す機能が見当たらなかったので自作しました。

# スクリプトで動的にメッシュを作り出す

inspector

完成したスクリプトの実行例。このようにインスペクターからも操作できるようになっている。スクリプトでの変形、Dotweenなどでアニメーションさせることも可能。

# メッシュとポリゴンと三角形

sankaku

全てのポリゴンは三角形(三つの頂点)からなり、それが集まって形になったものをメッシュと呼ぶ。

# 新規オブジェクトを作成しコンポーネントとしてアタッチさせる

雛形のプレハブを作っても良かったのですが、空オブジェクトを作り各コンポーネントをアタッチする方法をとりました。引数で親オブジェクトを渡し、その下に各オブジェクトを作成し、必要なコンポーネントをアタッチし、作成した子オブジェクトを戻り値として返します。今後はこの子オブジェクトがギズモになります。

# 三角ポリゴンの配列からメッシュを作成する

forループが-angle/2からプラスのangle/2までなのは、左右に角度の半分づつであるため。角度は整数とは限らないのでfloat型にしている。頂点の座標は三角関数で求める。角度にはラジアン法を使う必要があるので、いちいち変換しなくてはならない。(ここでも計算で重くなりそうだ・・・)

verticesは頂点のリスト型配列。中心軸が0番で、時計回りに1から順に頂点のVector3座標が代入される。

trianglesは各三角ポリゴンの頂点を表している。前述のverticesの添え字番号が入る。1番目の三角ポリゴンの頂点は0,1,2、2番目のポリゴンは0,2,3、3番目のポリゴンは0,3,4がそれぞれ頂点となる。3つの頂点の配列をリストにして、実質メッシュの設計図としている。

# ソースコードの全体像

RefleshGizmoメソッドの中でGetComponentを使用しているのでUpdate()などの毎フレーム呼ばれるメソッドに組み込むのはおすすめ出来ません。コンポーネントを事前にキャッシュする事も出来ますが、汎用性を優先して今回はメソッド内にGetComponentを組み込みました。

テスト用のスクリプトを用意してみました。Update()内での使用は勧めないと言っておきながら使ってますけど。。。ギズモを持たせたい親オブジェクトにtest.csをアタッチして下さい。FanGizmo.csはアタッチしなくていいです。

inspector

test.csをCubeオブジェクトにアタッチしてみた例

# 最後に

正直、これはブログにするか迷いました。需要があるかは不明ですが、自身の勉強のため投稿してみました。何かのお役に立てれば幸いです。






関連記事

【Unity】MagicOnionサーバを立ち上げて自己証明書でSSL通信してみる

blog

Unity向けgrpcサーバーManicOnionの導入時にSSL化やNGINXの設定に少し手こずったので備忘録も兼ねて手順をまとめておきました。

GO言語サーバーとUnityクライアント(C#)をgRPCで接続テストしてみた【入門レベル】

blog

UnityでgRPCをする場合、Magic Onionを使うのがお手軽ですが、今回はGO言語でサーバーを構築してみたかったので最低限の接続機能を自作してみました。備忘録を兼ね書き残しておきます。

【Unity】文字列に禁止ワードが含まれているかチェックをする方法

blog

Unityで下品な単語など望ましくない言葉が含まれていないかをチェックする方法を紹介します

Unityでモザイク処理をする方法

blog

今回はUnityで画像にモザイク処理を掛ける方法を紹介します。標準機能では用意されていないようなのでカスタムシェーダーで実装します。

FirebaseStorageからUnityへファイルを読み込み、Resourcesに保存する

blog

UnityでFIREBASEのStorageサービスから画像ファイルをダウンロードしてシーン上に表示、保存するまでの簡単な手順紹介です。

UNITYからMYSQLデータベースにアクセスする【初心者向け】

blog

UnityからMySQL等のデータベースにアクセスする簡単なサンプルプログラムを紹介します。若干Java Scriptの知識も必要になります。

UnityでFirebase Storeからデータを読み書きする

blog

FirebaseのFireStoreのデータをUnityから読み書きする手順を紹介します。入門レベル。

【Unity X Node.js】クライアント~サーバー間でAES暗号通信してみた

blog

Unityの暗号ライブラリCryptgraphyを使って暗号通信してみたかったので試してみました。

Unityで端末情報、IPアドレスを取得する方法

blog

Unityにて端末固有情報などをC#コードから取得する方法をまとめました。

UnityでTrail Rendererを使ってオブジェクトの軌跡を描画する

blog

今回はUnityでTrail Rendererを使ってオブジェクトの軌跡を描画する方法についてご紹介します。Trail Rendererを使うことで、オブジェクトがどのような軌跡を描いたかを可視化することができます。


スポンサーリンク

このサイトをシェアする