2011-04-12 2 views
2

저는 현재 Minecraft 클론 (당신이 3 차원 공간에 있고 구조를 만들기 위해 블록을 만들거나 삭제하는 게임)을 만들고 있습니다. 그래서 나는 필요한 모든 것을 얻었습니다. 만약 블록을 보면, 내가 원하는 방식으로 highligthed가되고, "RemoveBlock()"을 rightclick이라고 부르면 현재 블록을 보았습니다. 하지만 이제는 leftclick을 클릭하여 블록을 추가하고 싶습니다.XNA : 1 * 1 * 1 상자가 있는데 어느 쪽에서 클릭하고 있는지 알고 싶습니다. (Minecraft Clone)

내가 가지고있는 것 : AddBlock (Vector3 LookingAt, Vector3 Direction) 여기서 "LookingAt"는 내 Blockdata를 저장하는 곳의 3dArray와 관련이 있습니다. Direction은 Vector3.UnitX/Z/Y와 네거티브 중 하나입니다. 내가 수동으로 Direction = Vector3.UnitY라고 말하면 LookedAt 블록 위의 블록이 추가됩니다. 그게 내가 원하는거야.

그러나 블록을보고있는 쪽을 어떻게 알 수 있습니까? 즉. 결정 방향 : 내가 시도한 것은 LookedatBlock 주변에서 6 개의 구체를 만들고 CameraPossition에서 Ray를 CameraDirection으로 그린 ​​다음 Sphere가 먼저 충돌하는지 확인하려고했습니다. 6 개의 스피어는 큐브의 각면의 가운데에 항상 중심점이 있고 반지름은 0.5f입니다. 이것은 나에게 의미가있다. 그러나 그것은 효과가 없습니다. 이 일을하려면 어떻게해야합니까?

저는 다른 방법으로 사용할 수 있도록 Vector3.UnitX/Y/Z와 같은 결과가 필요합니다.

감사합니다.

답변

3

X, Y 및 Z 값을 확인하고 큐브의 원점 벡터에서 무엇을 찾았는지 알 수 있습니다.

예를 들어, 100 픽셀 큐브의 맨 뒤 왼쪽은 (0,0,0) (물론 큐브를 기준으로 함) 인 Vector3입니다. 큐브의 오른쪽 하단을 클릭하면 좌표는 (100, 100, 100)이됩니다. 맞습니까?

이것을 사용하면 큐브에서 사각형 경계를 쉽게 찾을 수 있습니다. 예를 들어, 6면은 다음 벡터 사이에 위치합니다.

면 1 : (0,0,0), (100,0,0), (0,0,100) 및 (100,0,100) 면 2 : (0,100,0), (100,100,0), (100,100,100)

이들은 큐브의 위쪽과 아래쪽입니다. 에서. 내가 좌표 중 하나를 엉망으로 만든다면 용서해주세요.

큐브를 클릭하는 위치를 결정할 수 있습니다. 클릭 한 위치의 Vector3을 찾아내어 간단히 (좋아,이 쪽의 값이 (i, 100, j)이면 ..)).

그 중 하나가 의미가 있습니까? 큐브를 클릭하면 일부 Vector가 반환된다고 가정합니다.

또한 마우스가 현재 가리키고있는 벡터 등을 보여주는 디버깅 도구를 추가하는 것이 도움이 될 수 있습니까?

+0

감사합니다. 이것은 매우 도움이되었습니다. – Richard