나는 (동적 위치에) 원과유니티 레이 캐스트 문제
아래 이미지처럼 --- 첫 번째 통해 내가이 일을하고 이유를 통과하지 않아야 다른 원을 만들려고 노력하고있어 음 왜냐하면 큰 개체에는 많은 다른 개체가있을 수 있기 때문입니다.
하지만 문제는 Physics.Raycast 항상 내 영역 감지되지 않는 것입니다 :
을 파란색 선은 raycasts 있습니다
기본적으로 내가 뭘하면을 통해 레이 캐스트입니다 전체 큰 원과 작은 하나가 어디인지 알아보십시오.
void GetCollisions() {
Angle FixedRenderAngle, k;
RaycastHit hit;
Vector3 p1, p2;
float d, d1, radius;
for (int i = 0; i < Radiuses.Count; i++) {
if (Angles[i] == null)
Angles[i] = new List<Angle>();
radius = Radiuses[i];
FixedRenderAngle = 360f/(float)NumberOfCalls;
AnglesLast[i] = 0;
Angle j = 0f, pj;
bool exception = false;
for (int l = 0; l < NumberOfCalls; l++) {
j+= FixedRenderAngle;
pj = j - FixedRenderAngle;
p1 = pj.PointByRadius (radius);
p2 = j.PointByRadius (radius);
Debug.DrawRay (p1, p2 - p1, Color.cyan, 3f);
if (Physics.Raycast (p1, p2 - p1, out hit, Vector3.Distance (p1, p2))) {
d = Vector3.Distance (p1, p2);
d1 = Vector3.Distance (p1,hit.point);
k = pj + (j -pj) * (d1/d);
AddToAngles (ref k, i);
}
if (Physics.Raycast (p2, p1 - p2, out hit, Vector3.Distance (p1, p2))) {
if (AnglesLast[i] == 0) exception = true;
d = Vector3.Distance (p1, p2);
d1 = Vector3.Distance (p1,hit.point);
k = pj + (j -pj) * (d1/d);
AddToAngles (ref k, i);
}
}
if (exception == true) {
Angle tmp = Angles[i][AnglesLast[i] - 1];
for (int l = AnglesLast[i] - 1; l > 0 ; l--)
Angles[i][l] = Angles[i][l-1];
Angles[i][0] = tmp;
}
}
}
각도 플로트 번호 (360-0) 학위를 대표하고 기능 PointByRadius 정상적으로 위치를 나타내는 Vector3를 반환의가있는 클래스 : 여기
큰 원의 객체를 검출 내 코드입니다 각도와 주어진 반경을 기준으로 원이됩니다.내가 뭔가 잘못했거나 레이 캐스트에 대해 알지 못하는 것이 있습니까? 어떤 도움을 주시면 감사하겠습니다. (물론 다른 방법이 도움이 될 것입니다)
거기에 작은 원을 "묻고 싶지 않은 이유가 무엇입니까?" – Tom
@Tom 기본적으로 원형 위치를 사용하여이 모든 작업을 일반 메시 (구형, 정육면체, 등 ...)에만 적용 할 수 있지만 불규칙한 메쉬에서는 작동하지 않습니다. – Vali
@Kay 설명해 주시겠습니까? 나는 그게 무슨 뜻인지 이해하지 못했습니다. – Vali