Unity에서 간단한 2D 하향식 슈터를 만들려고합니다. 나는 기본적인 움직임과 마우스의 추종을 가지고 있지만 운동에 문제가있다. Up과 Right를 동시에 말할 때마다 예상대로 대각선으로 움직이지만, Up 키를 놓으면 대각선 방향으로 계속 움직여서 오른쪽으로 이동합니다. 움직임을 처리하기위한 코드는 다음과 같습니다.Unity 2D Top Shooter 동작 문제 C#
void Update() {
if(Input.GetKey(Up)){
Debug.Log("UP");
Vector3 velUp = rigidbody2D.velocity;
velUp.y = walkSpeed;
rigidbody2D.velocity = velUp;
}
else if(Input.GetKey(Down)){
Vector3 velDown = rigidbody2D.velocity;
velDown.y = walkSpeed*-1;
rigidbody2D.velocity = velDown;
}
else if(Input.GetKey(Left)){
Vector3 velLeft = rigidbody2D.velocity;
velLeft.x = walkSpeed*-1;
rigidbody2D.velocity = velLeft;
}
else if(Input.GetKey(Right)){
Vector3 velRight = rigidbody2D.velocity;
velRight.x = walkSpeed;
rigidbody2D.velocity = velRight;
}
else{
Vector3 velStop = rigidbody2D.velocity;
velStop.x = 0;
velStop.y = 0;
rigidbody2D.velocity = velStop;
}
//rotation
Vector3 mousePos = Input.mousePosition;
Vector3 objectPos = Camera.main.WorldToScreenPoint (transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}
내가 언급 한대로 동작하도록하려면 어떻게해야합니까? 그것이 대각선으로 움직이면 움직임이 보이지 않게됩니다. 도움을 주시면 대단히 감사하겠습니다. 감사.
완벽하게 일했다! 고맙습니다. 마지막 부분을 설명하면 괜찮겠습니까? 나는 화합과 C#을 처음 접했고'vel.magnitude'와'Normalize' Parts를 이해하지 못했습니다. –
'vel.magnitude'는 속도의 "크기"를 얻습니다. 속도가 (1,1)이면 'magnitude'는 ~ 1.4입니다 (Mene이 "토끼 호핑"문제에 대해 말했듯이) 이것은 기본 삼각법 (Sin (ang) = 1/hyp)에서 작동합니다. 'Normalize'는 벡터를 줄여서 최대 성분이 1이되도록합니다. (2,4)는 (0.5,1) – anothershrubery
으로 정규화됩니다. 올바르지 않습니다. 'Normalize'는 크기가 1 인 벡터를 줄 것입니다. – Mene