Unity_2기 내일배움캠프 TIL

Unity_2기 5주차 (231204)

잼잼재미 2023. 12. 4. 21:46

오늘은 아이템의 구현했던 ItemSlow 부분을 정리하고, ItemDisruption 부분을 구현하는데 시간을 많이 썼다.

 

팀 프로젝트 구현 내용


ItemDisruption


기존 코드

 

private void DisruptionItemUse()
{
    Instantiate(balls);
}

 

단순히 balls 프리팹을 생성했더니, ball의 처음 생성 상태와 동일하게 패달에서 생성되었다. 이부분을 수정하였다.

 

 

수정 코드

private void DisruptionItemUse()
{
    _firstBall = Managers.Game.CurrentBalls[0];
    Rigidbody2D firstBallRb = _firstBall.GetComponent<Rigidbody2D>();
    Vector2 firstBallVec = firstBallRb.velocity;

    float seta;
    seta = Mathf.Atan2(firstBallVec.y, firstBallVec.x);

    // 우측볼
    GameObject secondBall = Instantiate(_firstBall, _firstBall.transform.position + new Vector3(1, 0, 0), Quaternion.identity);
    Managers.Game.CurrentBalls.Add(secondBall);
    ArkanoidBall secondArkanoidBall = secondBall.GetComponent<ArkanoidBall>();
    secondArkanoidBall.isLaunch = true;
    Rigidbody2D secondBallRb = secondBall.GetComponent<Rigidbody2D>();
    if (firstBallVec.x == 0)
    {
        secondBallRb.velocity = new Vector2(firstBallVec.y * Mathf.Cos(45), firstBallVec.y * Mathf.Sin(45));
    }
    else
    {
        secondBallRb.velocity = new Vector2(firstBallVec.x, firstBallVec.x * Mathf.Tan(seta - 45));
    }

    // 좌측볼
    GameObject thirdBall = Instantiate(_firstBall, _firstBall.transform.position + new Vector3(-1, 0, 0), Quaternion.identity);
    Managers.Game.CurrentBalls.Add(thirdBall);
    ArkanoidBall thirdArkanoidBall = thirdBall.GetComponent<ArkanoidBall>();
    thirdArkanoidBall.isLaunch = true;
    Rigidbody2D thirdBallRb = thirdBall.GetComponent<Rigidbody2D>();
    if (firstBallVec.x == 0)
    {
        thirdBallRb.velocity = new Vector2(-firstBallVec.y * Mathf.Cos(45), firstBallVec.y * Mathf.Sin(45));
    }
    else
    {
        thirdBallRb.velocity = new Vector2(-firstBallVec.x, firstBallVec.x * Mathf.Tan(seta - 45));
    }
}

우선 게임매니저가 가지고 있는데 CurentBalls에 접근해서 게임오브젝트를 받아왔다. 그리고 양 옆으로 ball 프리팹을 생성하고 게임오브젝트의 벡터값을 계산해서 오른쪽, 왼쪽으로 45도 씩 계산해서 각각 벡터값을 velocity 값으로 넣어줬다.

 

 

이미지

 

 

삼각 함수


https://kkln2486.tistory.com/150

 

삼각함수

삼각함수 공식 기본 공식 피타고라스 정리 기타 공식 sin(-θ) = -sinθ cos(-θ) = cosθ 각도 Degree 각도법 (도수법) 0 ~ 360도 표기 Radian 각도법 (호도법) 0 ~ 2π 표기, 1rad = 57.29도 (원의 반지름이 1이고, 호

kkln2486.tistory.com

 

 

오늘의 회고


어제 기능을 구현했던 아이템 중 ItemDisruption을 보충 구현했다. 어제까지는 볼이 복사되어 생성되지만 움직이지 않고, 패달 위치에서 생성되는 등 버그가 많았다. 그래서 오늘 복사된 볼이 볼의 실제 위치의 좌, 우에서 생성되도록, 볼이 가지고 있는 스크립트의 isLunch를 true로 해주었다. 그리고 볼이 실제로 가지고 있는 velocity 값을 받아와서 조금씩 각각 각도를 주어서 velocity 값을 넣어줬다. 이 부분에서 삼각함수를 썼는데 거의 처음 본 내용이라서 아주 오래걸렸다. 볼이 수직으로 올라갈때는 정상적으로 작동이 되도록 구현했지만 볼의 각도가 틀어질 때마다 방향이 바뀌는 버그가 있었다. 아마도 각도가 높아지면서 +, -가 변하는 경우가 있기때문에, 방향이 변하는 것 같다. 아이템의 기능은 정상적으로 작동을 하니 이 버그는 아마도 마지막에 수정을 할 것이다. 오늘은 작업을 하면서 내가 짠 코드가 아닌 다른 사람이 짠 코드를 분석하는 것이 정말 어렵다는 것을 느꼈다. 같은 프로젝트에서 조원이 작업한 내용이지만, 그 코드를 분석하려면 시간이 정말 오래걸렸다. 그래서 이러한 부분은 조원들끼리 의사소통과 주기적인 회의가 꼭 필요한 것 같다.

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

Unity_2기 5주차 (231206)  (0) 2023.12.06
Unity_2기 5주차 (231205)  (1) 2023.12.05
Unity_2기 4주차 (231201)  (0) 2023.12.01
Unity_2기 4주차 (231130)  (1) 2023.11.30
Unity_2기 4주차 (231129)  (0) 2023.11.29