【UnityC#】オブジェクトの法線を可視化する方法
オブジェクトの法線を可視化する方法をメモ。
[ 方法 ]
以下のコードを法線を可視化したいオブジェクトにアタッチします。
using UnityEngine; [ExecuteInEditMode] public class script : MonoBehaviour { private float length = 1; private void Update() { MeshFilter meshFilt = GetComponent<MeshFilter>(); Mesh mesh = meshFilt.sharedMesh; Vector3[] localVerts = mesh.vertices; Vector3[] localNormals = mesh.normals; for (int i = 0; i < localVerts.Length; i++) { Vector3 localVert = localVerts[i]; Vector3 localNormal = localNormals[i]; Vector3 worldVert = transform.TransformPoint(localVert); Vector3 worldNormal = transform.TransformDirection(localNormal); Debug.DrawLine(worldVert, worldVert + worldNormal * length, Color.red); } } }
[ 関連記事 ]
【UnityC#】3次元空間で直線ABと直線CDが交差するか判定する方法
3次元空間で直線ABと直線CDが交差するか判定する方法をメモ。
[ 方法 ]
using System.Collections; using System.Collections.Generic; using UnityEngine; public class script : MonoBehaviour { // 直線ABと直線CDが交差するかを求める関数 private bool IsStraightLineOnStraightLine(Vector3 a, Vector3 b, Vector3 c, Vector3 d) { Vector3 vecAB = b - a; Vector3 vecCD = d - c; Vector3 cross = Vector3.Cross(vecAB, vecCD); return cross.magnitude < 0.00001f; } }
【UnityC#】3次元空間で直線ABと点Pの距離を求める方法
3次元空間で直線ABと点Pの距離を求める方法をメモ。
[ 方法 ]
using System.Collections; using System.Collections.Generic; using UnityEngine; public class script : MonoBehaviour { // 点Pから最も近い直線AB上に存在する点を求める関数 private Vector3 ClosestPointOnStraightLine(Vector3 a, Vector3 b, Vector3 p) { Vector3 vecAB = b - a; Vector3 vecAP = p - a; Vector3 closestPos = a + Vector3.Project(vecAP, vecAB); return closestPos; } // 直線ABと点Pの距離を求める関数 private float DistBetweenPointAndStraightLine(Vector3 a, Vector3 b, Vector3 p) { Vector3 closestPoint = ClosestPointOnStraightLine(a, b, p); float dist = Vector3.Distance(closestPoint, p); return dist; } }
【UnityC#】3次元空間で点Pから最も近い直線AB上に存在する点を求める方法
3次元空間で点Pから最も近い直線AB上に存在する点を求める方法をメモ。
[ 方法 ]
using System.Collections; using System.Collections.Generic; using UnityEngine; public class script : MonoBehaviour { // 点Pから最も近い直線AB上に存在する点を求める関数 private Vector3 ClosestPointOnStraightLine(Vector3 a, Vector3 b, Vector3 p) { Vector3 vecAB = b - a; Vector3 vecAP = p - a; Vector3 closestPos = a + Vector3.Project(vecAP, vecAB); return closestPos; } }
【UnityC#】3次元空間で線分ABと点Pの距離を求める方法
3次元空間で線分ABと点Pの距離を求める方法をメモ。
[ 方法 ]
using System.Collections; using System.Collections.Generic; using UnityEngine; public class script : MonoBehaviour { // 点Pから最も近い線分AB上に存在する点を求める関数 private Vector3 ClosestPointOnLineSegment(Vector3 a, Vector3 b, Vector3 p) { Vector3 vecAB = b - a; Vector3 vecAP = p - a; float mag = vecAB.magnitude; Vector3 unitVecAB = vecAB.normalized; float dot = Vector3.Dot(vecAP, unitVecAB); dot = Mathf.Clamp(dot, 0f, mag); return a + unitVecAB * dot; } // 線分ABと点Pの距離を求める関数 private float DistBetweenPointAndLineSegment(Vector3 a, Vector3 b, Vector3 p) { Vector3 closestPoint = ClosestPointOnLineSegment(a, b, p); float dist = Vector3.Distance(closestPoint, p); return dist; } }
【UnityC#】3次元空間で点Pから最も近い線分AB上に存在する点を求める方法
3次元空間で点Pから最も近い線分AB上に存在する点を求める方法をメモ。
[ 方法 ]
using System.Collections; using System.Collections.Generic; using UnityEngine; public class script : MonoBehaviour { // 点Pから最も近い線分AB上に存在する点を求める関数 private Vector3 ClosestPointOnLineSegment(Vector3 a, Vector3 b, Vector3 p) { Vector3 vecAB = b - a; Vector3 vecAP = p - a; float mag = vecAB.magnitude; Vector3 unitVecAB = vecAB.normalized; float dot = Vector3.Dot(vecAP, unitVecAB); dot = Mathf.Clamp(dot, 0f, mag); return a + unitVecAB * dot; } }
【UnityC#】3次元空間で直線AB上に点Pが存在するか判定する方法
3次元空間で直線AB上に点Pが存在するか判定する方法をメモ。
[ 方法 ]
using System.Collections;https://edunity.hatenablog.com/entry/20250616/1750064834 using System.Collections.Generic; using UnityEngine; public class script : MonoBehaviour { // 直線AB上に点Pが存在するかを求める関数 private bool IsPointOnStraightLine(Vector3 a, Vector3 b, Vector3 p) { Vector3 vecAB = b - a; Vector3 vecAP = p - a; Vector3 cross = Vector3.Cross(vecAB, vecAP); float mag = cross.magnitude; return mag < 0.00001f; } }