2014-07-17 8 views
-5

나는 튜토리얼을 위해 몇 가지를 따라 갔고 내 물체를 궤적을 따라갈 수있는 스크립트로 만들려고했지만 불행히도 내 시도는 효과가 없었다. 나는 발사체 운동의 기본 물리학 및 수학을 이해하지만 프로그램 할 수는 없다. 여기 Unity3d의 발사체

상황이다

A는 지상 어떤 높이에서 고정 된 목적 및 피탄 운동을 수행하는 개체를 발생하고 B가 선형으로 일정 속도 (좌측)을 향해 이동 그냥 A의 게임 객체가 버튼 클릭으로 발사체 동작을 따르길 원합니다. 나는 혼자서 많은 시도를했으나 효과가 없었습니다.

+3

-1 : –

+3

게시물 개선에 대한 도움을 받으려면 http://stackoverflow.com/help/mcve를 참조하십시오. – jordanhill123

+0

@ JohnSaunders : 몇 가지 방법을 시도해 보았습니다. -> 가장 간단한 방법은 중력 이외에 AddForce를 위쪽 방향으로 사용하는 것입니다. 그 외에 대상 대상에 대한 시작 각도를 계산하려했지만 그 중 아무 것도 작동하지 않았습니다. –

답변

3

더 구체적으로 설명해 드리겠습니다. 발사체는 A 지점에서 발사되고 2D에서 일정한 속도로 수평 이동하는 B를 명중해야합니다.

는 시간에 발사체의 위치이다

P.x = A0.x + VP0.x * t 
P.y = A0.y + VP0.y * t - g/2 * t^2 

그리고이 시간이 지남에 따라, B의 위치이다

A0는 이때, 위치이다
B.x = B0.x + VB0.x * t 
B.y = B0.y 

0; B0는 시간 0에서 B의 위치이고; VB0는 B의 속도 (상수와 수평 만)이고 VP0는 발사체를 발사 할 속도입니다. 't'(발사체가 B를 치는 데 걸리는 시간)의 값을 조정하여 시스템을 제한하면 VP0을 해결해야합니다.

A0.x + VP0.x * t = B0.x + VB0.x * t 
A0.y + VP0.y * t - g/2 * t^2 = B0.y 

해결 VP0 :

VP0.x = (B0.x - A0.x)/t + VB0.x 
VP0.y = (B0.y - A0.y)/t + g/2 * t 

을 이제 우리는 발사체의 속도를 가지고, 그것을 수행 할 수 있습니다 시뮬레이션 우리는 충돌시에, P와 B가 동일한 것이라고 말하여이 작업을 수행 할

// calculate velocity when firing projectile 
launchVelocity.x = (b.x - a.x)/desired_time + velocity_b.x; 
launchVelocity.y = (b.y - a.x)/desired_time + gravity/2 * desired_time; 

// then for each frame, update position 
elapsedTime += dt; 
projectile.x = a.x + launchVelocity.x * elapsedTime; 
projectile.y = a.y + (launchVelocity.y - gravity/2 * elapsedTime) * elapsedTime; 

단점은 B가 A쪽으로 이동하면 velocity_b가 음수가 될 수 있다는 것입니다. "그것은 작동하지 않았다"에 대한 Projectile motion

-1

기본적으로 내가 도움이 아니라 발사체 스크립트

이보다 (따라서 소스 스크립트) 촬영시 인스턴스화 할 필요가 있었다. 정확히 어떤 방식으로 "작동하지 않습니까?" 정확히 무엇을 시도 했습니까?