사용자가 스크린에 닿을 때 나는 발사체를 쏘는 간단한 게임을 만들려고합니다. 먼저 8 개의 발사체 (스프라이트)를 스폰하고 사용자가 화면에 닿을 때 탑형 발사체가 터치 방향으로 날아가고 싶습니다. 나는 이것을 할 수 있었다. 그러나, 내가 쏠 때마다, 발사체가 잘못된 방향으로 가고, 여기에 문제를 설명 할 이미지가 있습니다. 발사체를 쏘지 만 방향이 잘못됨 - 2D 게임
는 물론 이미지는 여전히 여기에 있지만 객체는 파괴됩니다 다음 화면의 외출 때까지 비행 것입니다. 여기 는 나중에이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;
}
왜 이것을 사용합니까? 'transform.rotation = Quaternion.Slerp (transform.rotation, q, Time.deltaTime * speed); ' –
@HieuNguyenTrung 이미 그걸 없애고 대신 Lerp를 사용하고 있습니다. –