ぼくの息抜き

ぼくの息抜き

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

CSS MenuMaker

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

f:id:bokunoikinuki:20180908232241p:plain

今回でPart4今日だけで4記事目。

 

Planeを理解する 

参考記事

  1. 法線ベクトル - Wikipedia

  2. UnityのVector3やTransformのStatic変数で方向を取得する | Unityを使った3Dゲームの作り方(かめくめ)

  3. Plane.SetNormalAndPosition - Unity スクリプトリファレンス

  4. 【Unity】メッシュカッターについて その3 - ぐーるらいふ

  5. プロパティ(getter/setter)について - Unityな日々(Unity Geek)

前回わからなかったところがこれ。

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

normalizedも追加した。よくわからん。

 

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

        // 2点の中心座標を求める
        position = (_lineRenderer.GetPosition(0) + _lineRenderer.GetPosition(1)) / 2;
        // Position(0)から2点の中心座標を引く??
        // ⇨なぜ引くんだ?わからん。
        var p1 = _lineRenderer.GetPosition(0) - position;
        // print (p1);
        
        normal = (Quaternion.Euler(0f, 0f, 90f) * p1).normalized;
        _plane.SetNormalAndPosition(normal, position);

    }

下線を引いたところがよくわからなかった。

主に法線がわからん。

Unity関係なしで法線で調べてみると、

3次元ではある面に垂直なベクトル。法線(ほうせん、normal)はある接線に垂直な線のことである。

ある面に垂直なベクトルらしい。それだったらだいぶ理解しやすい。

だめだ、なぜ、Quaternion.Euler(0f, 0f, 90f)が必要なのかわからない。

normalizedは_plane.SetNormalAndPosition(normal, position);にはnormalizedで正規化されたベクトルが必要なのはわかった。

一旦次の記事に進んで、切られるようにしよう。そこからならなぜ法線を定義する必要があるのかわかるかもしれない。

実践

  1.  CreatePlane側にGetterを作る
        // Getter?
        public Plane Plane  {
            get {
                return plane;
            }
        }
  2. 参考記事4のCrossPointCheckスクリプトを作る
  3. 空のObjectを作ってCrossPointCheckを入れる
  4. エラーで入れ込めない。

記事作成途中からだいぶ日が空いてしまったので、一旦ここで区切る。

問題点整理

CrossPointCheckのスクリプトはプロジェクトに入れない方がいいのかもしれない。

ただ、その問題じゃない気がする。

CrossPointCheckのスクリプト43行目の

var vertices = _createMesh.Vertices;

でエラーがでる。

Assets/Scripts/CrossPointCheck.cs(107,36): error CS1061: Type `CreateMesh' does not contain a definition for `Vertices' and no extension method `Vertices' of type `CreateMesh' could be found. Are you missing an assembly reference?
 

ちょっといじってしまったので、エラー文言の行数が違うが、初期の43行目もこんな感じのエラーだった。

_createMesh.Vertices;

の部分はMesh.verticesなんじゃないかなと思う。

Mesh.vertices - Unity スクリプトリファレンス

いや、それか新しくCreatePlaneとCreateMeshのスクリプト側に23行目と同じようにVerticesという変数作ってGetterを作るのかもしれん!以下23行目

var plane = _createPlane.Plane; // CreatePlane側にgetter作ってあげてね

うわ、なんかそんな気がしてきた。

ということで作って見た。

できた。

f:id:bokunoikinuki:20180922220522p:plain

適当すぎるし、参考記事のように線を引けない。

まだまだ理解できていないし、やるべきことがたくさんある。

とりあえずこの記事はここまでにしよう。

途中でやめるつもりが案外進んだので、惰性で書き続けてしまった。