2017-09-05 5 views
0

사용자가 스크린에 닿을 때 나는 발사체를 쏘는 간단한 게임을 만들려고합니다. 먼저 8 개의 발사체 (스프라이트)를 스폰하고 사용자가 화면에 닿을 때 탑형 발사체가 터치 방향으로 날아가고 싶습니다. 나는 이것을 할 수 있었다. 그러나, 내가 쏠 때마다, 발사체가 잘못된 방향으로 가고, 여기에 문제를 설명 할 이미지가 있습니다. 발사체를 쏘지 만 방향이 잘못됨 - 2D 게임

Projectile

는 물론 이미지는 여전히 여기에 있지만 객체는 파괴됩니다 다음 화면의 외출 때까지 비행 것입니다. 여기

는 나중에이

GameplayController.cs

if (Input.GetMouseButtonDown(0)) 
    { 
     Vector3 position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0); 
     position = Camera.main.ScreenToWorldPoint(position); 

     GameObject target; 
     target = new GameObject(); 
     target.transform.position = position; 


     Arrow comp = currentArrows[0].GetComponent<Arrow>(); 
     comp.setTarget(target.transform); 
     comp.GetComponent<Arrow>().arrowSpeed = 12; 
     comp.GetComponent<Arrow>().shoot = true; 
     currentArrows.RemoveAt(0); 
     Destroy(target); 
    } 

나는 여기가 아닌 전화 터치 마우스 입력을 얻고 알고 그 날을 위해 괜찮아요을 처리하는 코드입니다 그것을 터치 입력으로 변환합니다.

Arrow.cs

public bool shoot = false; 
public float arrowSpeed = 0.0f; 
public Vector3 myDir; 
public float speed = 30.0f; 
private Transform target; 

// Use this for initialization 
void Start() { 

} 

// Update is called once per frame 
void Update() { 
    if(shoot) 
    { 
     transform.position += transform.right * arrowSpeed * Time.deltaTime; 
    } 

} 


public void setTarget(Transform targetTransform) 
{ 
    this.target = targetTransform; 
    Vector3 vectorToTarget = target.position - transform.position; 
    float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg; 
    Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); 
    transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * speed); 
} 

private void OnBecameInvisible() 
{ 
    print("Disappeared"); 
    Destroy(gameObject); 
    Gameplay.instance.isShooting = false; 
} 
+0

왜 이것을 사용합니까? 'transform.rotation = Quaternion.Slerp (transform.rotation, q, Time.deltaTime * speed); ' –

+0

@HieuNguyenTrung 이미 그걸 없애고 대신 Lerp를 사용하고 있습니다. –

답변

1

Vector3 위치 = 새로운 Vector3 (Input.mousePosition.x, Input.mousePosition.y, 0);

나는 당신의 문제는 당신이 클릭하여 화면을 좌표를 얻고있는 것은 아닌 세계 좌표, 실제로 다른 두 가지 인 것입니다 생각합니다. 정확하게 발사체를 인도하려면 완료된 것처럼 화면 좌표를 세계로 변환해야합니다. here. 당신은 어떻게 든 회전 후 오른쪽으로 발사체를 이동하고

transform.position += transform.right * arrowSpeed * Time.deltaTime; 

:

다음 일은

는 발사체를 이동하는 방법입니다. 어쩌면 Vector3.Lerp으로 이동하려고하면 더 쉬울 것이고 Transform.LookAt으로 돌리십시오.

+0

그 문제와 동일한 문제 ... 코드를 업데이트하고 해당 코드 줄을 포함 시켰습니다. –

+0

@MuhandJumah, 대답 편집. 한 번 더 발사체 이동 코드를 살펴 봤습니다. 발사체를 Vector3.Lerp로 이동하는 방법을 변경하십시오. 더 간단 할 것입니다. – vmchar

+0

변경 사항을 적용하고 다시 돌아옵니다. –