ぼくの息抜き

ぼくの息抜き

気ままな二人が記事を書くことで息抜きしていくブログ

CSS MenuMaker

【VR,OculusGo,Unity】素人がメッシュカットについて実際に触って理解する Part3

f:id:bokunoikinuki:20180908232241p:plain



  1. 【VR,OculusGo,Unity】素人がメッシュカットについて実際に触って理解する Part1 - ぼくの息抜き

  2. 【VR,OculusGo,Unity】素人がメッシュカットについて実際に触って理解する Part2 - ぼくの息抜き

前提知識がなさすぎて、まだポリゴンメッシュを作るところしか行なっていない。

それなのにPart3!

まぁのんびり学ぼう!興味のある新しいことを学ぶって楽しい。

今度こそポリゴンメッシュを切るPlaneを作る

参考記事

  1. 【Unity】メッシュカッターについて その2 - ぐーるらいふ
  2. LineRendererの使い方 Unity - 万年素人からGeekへの道

 

実践

とりあえずPlaneを作る

参考記事1を見ながらPlaneなるものを作る。

  1. CreateEmptyでGameObjectを作る
  2. 作ったGameObjectの名前をPlaneにする
  3. スクリプトCreatePlaneを作成
  4. 参考記事のスクリプトをコピペ
  5. CreatePlaneをPlaneにアタッチ
  6. 実行

    f:id:bokunoikinuki:20180909090650p:plain

なんだかよくわからないが、ピンクの四角ができた。

CreatePlaneを解読

    public void Create()
    {
        _lineRenderer = GetComponent<LineRenderer>();
        _plane = new Plane();

        position = (_lineRenderer.GetPosition(0) + _lineRenderer.GetPosition(1)) / 2;
        var p1 = _lineRenderer.GetPosition(0) - position;
        normal = (Quaternion.Euler(0f, 0f, 90f) * p1).normalized;
        _plane.SetNormalAndPosition(normal, position);

    }

全然わからん。

Planeとはたった一つのpointとたった1つのnormalを持つ平面を表す構造体。 らしい。

lineRenderer.GetPosition

_lineRenderer.GetPosition

がまずわからん。

LineRenderer型でGetPositon関数を呼び出してる。Unityのライブラリを見てみよう。

ライブラリ見ても全然わからなかった。

参考記事2を見てInspectorのLineRenderer上にPositionという項目があることを知った。

f:id:bokunoikinuki:20180909094924p:plain

たった一つのpointとたった1つのnormalを持つ平面を表す構造体

  • このPointがPositionにあたる?
  • Pointは増やせる
  • Pointの型はVector3

InspectorでPositionのSizeを増やしたり、数字を変えると途端に理解できた。

f:id:bokunoikinuki:20180909095235p:plain

Pointを増やしてそれぞれ数値を変えるとぐねぐねする。どっかでLineRendererは帯みたいなものと形容していた。確かにScene上でカメラを変えると向きが勝手に変わる。カメラに対して自動で法線が変わってるのか?

f:id:bokunoikinuki:20180909100230g:plain

とにかくGetPosition(0)はPositionの座標を取得していることがわかった。

position = (_lineRenderer.GetPosition(0) + _lineRenderer.GetPosition(1)) / 2;

なのでこれは2つの点の中心座標を取得している。

これは2点の次の行からまたわからん

次の行もすんなり理解できると思ったら、なぜか0の地点から2点の中心座標分引いている。

        // Position(0)から2点の中心座標を引く??
        // ⇨なぜ引くんだ?わからん。
        var p1 = _lineRenderer.GetPosition(0) - position;

そしてそのp1を使い、

        normal = (Quaternion.Euler(0f, 0f, 90f) * p1).normalized;

法線を定義して、

        _plane.SetNormalAndPosition(normal, position);

SetNormalAndPositionなるものを使って、planeに代入している?

だめだ。わからないことだらけ。

一旦力尽きた。ゆっくり解読していこう。

わからないこと

  • plane.SetNormalAndPosition
  • normal(法線)もう一回調べる

まとめ、感想

一歩ずつ一歩ずつ。