新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。動的にメッシュを生成するシリーズです。今回はマウスに追随するブラシのようなメッシュを動的に生成したいと思います。先日執筆した球の描画より簡単です。頂点の座標と順番その前に頂点の座標を決めるためのマウス座標の変換処理の説明を少しだけ。_cam.ScreenToWorldPoint(_mousePos);Camera.ScreenToWorldPoint関数を使用して楽をします。スクリーン座標のマウス座標を渡すだけでワールド座標に変換してくれる超便利関数です。マウス座標をそのまま渡してはいけない場合が多いです。マウス座標のz値は0です。ScreenToWorldPoint関数は、カメラからオフセットした距離(与えたz値)上において、カメラから見たときのスクリーン座標と一致するワールド座標を割り出していますので、Z値が0だと、カメラのワールド座標が返って来てしまい、期待するような挙動になってくれません。今回はマウスの位置とメッシュの生成場所を一致させたいので、メッシュが生成されるz座標を0としているため、原点から離れたカメラの距離をz値とするとマウスの位置と生成されるメッシュの位置がぴったり合います。※カメラのx、y座標は0としています図のようにスクリーン座標からワールド座標に変換したマウス座標をもとに各頂点の座標を決めていきます。0);_vertices.Add(pt0);_vertices.Add(pt1);_vertices.Add(pt2);_vertices.Add(pt3);今回はこのようなレイアウトにしています。上記のコードは描画の初回フレームのみの処理です。0);_vertices.Add(pt2);_vertices.Add(pt3);2フレーム目からは、このように2頂点ずつ追加していきます。2頂点インデックスは上のような順序にしています。2);コード的にこのような感じになります。_offsetIndexは初回の0,1,3,2四角形を描画した後は、頂点インデックス番号は2番から始まってほしいので、そのオフセットを行う変数です。2;四角形を描画し終えた番号に2を加算すると頂点インデックスが繋がります。このままだと、筆を下から上に移動させるとメッシュが反転するため、デフォルトのシェーダ設定だとカリングされて表示されなくなります。Offと両面描画に設定にして、今回は表示させるようにしました。全体コードはこんな感じです。まとめ結構お手軽にお絵かきっぽいメッシュを動的に作ることができました。書きっぱなしで筆が繋がり続けるテクスチャが貼れない筆の太さが一定Z座標が一定(3D空間をフルに使ってみたい)など、いろいろと調整できる項目がありそうです。マウスに追随する形で動的にメッシュを生成するTweet読者になるボタンを押して貰えるととてもがんばれます。大庭俊介(bao_bao)渋谷のUnityエンジニア。スマホゲーム作って生活しています。設計、組み込み、演出一通りを自分1人で完結して作るのが得意です。よろしければTwitterフォローお願いします。(@ohbashunsuke)株式会社サムザップでUnityエンジニアとしてスマホゲーム作っています。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。