【VR,OculusGo,Unity】素人がメッシュカットについて実際に触って理解する Part4
今回でPart4今日だけで4記事目。
Planeを理解する
参考記事
前回わからなかったところがこれ。
- 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で正規化されたベクトルが必要なのはわかった。
一旦次の記事に進んで、切られるようにしよう。そこからならなぜ法線を定義する必要があるのかわかるかもしれない。
実践
- CreatePlane側にGetterを作る
// Getter? public Plane Plane { get { return plane; } }
- 参考記事4のCrossPointCheckスクリプトを作る
- 空のObjectを作ってCrossPointCheckを入れる
- エラーで入れ込めない。
記事作成途中からだいぶ日が空いてしまったので、一旦ここで区切る。
問題点整理
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作ってあげてね
うわ、なんかそんな気がしてきた。
ということで作って見た。
できた。
適当すぎるし、参考記事のように線を引けない。
まだまだ理解できていないし、やるべきことがたくさんある。
とりあえずこの記事はここまでにしよう。
途中でやめるつもりが案外進んだので、惰性で書き続けてしまった。