2016-07-09 6 views
1

혼자서 게임을 만들려고 어려움을 겪었습니다.특정 방향으로 물체를 가속

나는이 객체를 가지고 있으며 벡터 3 점으로 가속화해야한다.

나는 Vector3.MoveTowards 명령을 사용해 보았지만 물체는 일정한 속도로 움직이고 목적지에서 멈 춥니 다.

내가해야할 것은 객체가 0 속도에서 벡터 3 점으로 가속하고 그 지점에서는 멈추지 않지만 점을 통과 한 후에는 같은 방향으로 계속 진행해야한다는 것입니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까?

감사합니다.

답변

2

Update 또는 FixedUpdate 메서드에서 호출되는 메서드에서이 단계를 수행하십시오. 강체를 사용하는 경우 FixedUpdate을 사용하는 것이 좋습니다.

먼저 강체를 사용하지 않는 경우 위치에서 점까지의 방향을 찾고 스크립트에 velocity 인스턴스 변수를 정의해야합니다. Rigidbody을 사용하는 인 경우 rigidbody.velocity을 대신 사용하십시오. target은 가속하려고하는 Vector3 위치입니다.

// Use rigidbody.velocity instead of velocity if using a Rigidbody 
private Vector3 velocity; // Only if you are NOT using a RigidBody 

Vector3 direction = (target - transform.position).normalized; 

그런 다음 대상을 이미 통과했는지 여부를 확인해야합니다. 이 검사는 우리가 우리가 필요이 우리 Transform 또는 Rigidbody을 가속화 수행하면 속도가 같은

// If our velocity and the direction point in different directions 
// we have already passed the target, return 
if(Vector3.Dot(velocity, direction) < 0) 
    return; 

남아 있는지 확인합니다.

// If you do NOT use rigidbodies 
// Perform Euler integration 
velocity += (accelMagnitude * direction) * Time.deltaTime; 
transform.position += velocity * Time.deltaTime; 

// If you DO use rigidbodies 
// Simply add a force to the rigidbody 
// We scale the acceleration by the mass to cancel it out 
rigidbody.AddForce(rigidbody.mass * (accelMagnitude * direction)); 

나는 이런 일을 할 때 훨씬 더 의미가 있기 때문에 당신이 Rigidbody를 사용하는 것이 좋습니다.

+0

죄송 합니다만, 그 위치에서 멈추고 있습니다. 스크립트의 세 번째 부분은 어디로 가야합니까? 대답의 두 번째 부분에있는 if 문 안에 있습니까? –

+0

@AlbertoO. * if * if 문이어야합니다. – EvilTak