Unity_2기 내일배움캠프 TIL

Unity_2기 5주차 (231206)

잼잼재미 2023. 12. 6. 21:06

최종적으로 유니티 팀 프로젝트 마무리 작업 및 QA 테스트를 진행했다. QA 테스트에서 발견한 버그를 수정했다.

 

버그 내용 및 수정


버그 내용


ItemDisruption

볼이 양 옆의 벽과 근처에서 복사가 될 때, 복사된 볼이 벽을 뚫는 버그가 발생.

 

 

수정 내용


 

 

 

기존 코드

public void Disruption()
{
    var ball = Managers.Game.CurrentBalls[0];
    Rigidbody2D BallRb = ball.GetComponent<Rigidbody2D>();
    Vector2 BallVec = BallRb.velocity;

    InstantiateBall(ball, BallRb, BallVec, false);
    InstantiateBall(ball, BallRb, BallVec, true);
}

private void InstantiateBall(GameObject mainBall, Rigidbody2D BallRb, Vector2 BallVec, bool IsLeft)
{
    float directionMultiplier = IsLeft ? -1f : 1f;
    float seta = Mathf.Atan2(BallVec.y, BallVec.x);
    Vector2 ballPos = mainBall.transform.position + new Vector3(directionMultiplier, 0, 0);
    GameObject ball = Managers.Resource.Instantiate("BallPrefab", ballPos);
    ball.GetComponent<Ball>().BallState = BallPreference.BALL_STATE.LAUNCH;
    Managers.Game.CurrentBalls.Add(ball);
    Rigidbody2D secondBallRb = ball.GetComponent<Rigidbody2D>();
    if (BallVec.x == 0)
    {
        secondBallRb.velocity = new Vector2(directionMultiplier * BallVec.y * Mathf.Cos(45), BallVec.y * Mathf.Sin(45));
    }
    else
    {
        secondBallRb.velocity = new Vector2(directionMultiplier * BallVec.x, BallVec.x * Mathf.Tan(seta - 45));
    }
}

 

 

수정 코드

public void Disruption(GameObject player)
{
    var ball = Managers.Ball.GetBallsForPlayer(player)[0];
    Rigidbody2D BallRb = ball.GetComponent<Rigidbody2D>();
    Vector2 BallVec = BallRb.velocity;

    InstantiateBall(ball, player, BallVec, false);
    InstantiateBall(ball, player, BallVec, true);
}

private void InstantiateBall(GameObject mainBall, GameObject player, Vector2 BallVec, bool IsLeft)
{
    float directionMultiplier = IsLeft ? -1f : 1f;
    float seta = Mathf.Atan2(BallVec.y, BallVec.x);
    Vector2 ballPos = mainBall.transform.position;
    GameObject ball = Managers.Resource.Instantiate("BallPrefab", ballPos);
    ball.GetComponent<Ball>().BallState = BallPreference.BALL_STATE.LAUNCH;
    ball.GetComponent<Ball>().AssignPlayer(player);
    Managers.Ball.AssignBallToPlayer(player, ball);
    Rigidbody2D secondBallRb = ball.GetComponent<Rigidbody2D>();
    if (BallVec.x == 0)
    {
        secondBallRb.velocity = new Vector2(directionMultiplier * 1f * Mathf.Cos(45), 1f * Mathf.Sin(45));
    }
    else
    {
        secondBallRb.velocity = new Vector2(directionMultiplier * BallVec.x, BallVec.x * Mathf.Tan(seta - 45));
    }
}

기존 코드는 메인볼의 위치 +-(1,0) 위치에서 복사볼이 생성되었다. 메인볼의 위치에서 복사볼이 생성되도록 수정하여 버그를 수정했다.

 

 

오늘의 회고


오늘은 전체적으로 QA 테스트 위주로 진행했다. 테스트 중, 내가 구현했던 ItemDisruption에서 복사된 볼이 벽을 뚫고 지나가는 버그를 발견했다. 처음에는 메인볼이 벽과 근처라면 복사볼 생성 위치를 +(1,0)이 아닌 +(0,1)로 바꿀려고 했으나, 벽의 position을 불러오는데 문제가 있었다. 그래서 생각한 방법이 어차피 볼은 서로 충돌하지 않으므로 복사된 볼이 메인볼 위치에서 생성되어도 상관없다고 판단하여 간단하게 버그를 수정할 수 있었다. 

새로운 기능을 구현하는 것보다 오늘은 프로젝트 결과물을 테스트하는데 시간을 많이 썼는데 이러한 QA 테스트 부분도 아주 중요하다고 느꼈다. 구현할때는 미처 생각하지 못했던 버그, 오류들이 많이 발견 되었다. 

마지막으로 내일 오전까지 프로젝트를 잘 마무리해서 발표까지 좋은 결과가 있었으면 좋겠다!

'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글

Unity_2기 5주차 (231208)  (0) 2023.12.08
Unity_2기 5주차 (231207)  (1) 2023.12.07
Unity_2기 5주차 (231205)  (1) 2023.12.05
Unity_2기 5주차 (231204)  (0) 2023.12.04
Unity_2기 4주차 (231201)  (0) 2023.12.01