(25/07/03)기획 변경 대응

허윤·2025년 7월 3일
    public void MouseTraceVignette(Vector3 pos)
    {
        Vector2 screenPos = Camera.main.WorldToScreenPoint(pos);
        Vector2 mousePos = Input.mousePosition;

        curr = 1f-Vector2.Distance(screenPos, mousePos)/(res);

        vignette.intensity.value = curr;
    }

이전 코드

단일 객체에서 vignette 범위를 호출하는 함수로 달일객체이기에 거리비교가 필요 없엇다.

변경된 기획 내용 : 라운드당 개체 수 증가

    public void MouseTraceVignette()
    {

        Vector2 pos = Vector2.one;
        float cDist = float.MaxValue;
        for (int i = 0; i < tracers.Count; i++)
        {
            if (tracers[i].IsDestroyed()) return;
            float curr = Vector2.Distance(Input.mousePosition, tracers[i].position);
            if (cDist > curr))
            {
                cDist = curr;
                pos = tracers[i].transform.position;
            }
        }


        Vector2 screenPos = Camera.main.WorldToScreenPoint(pos);
        Vector2 mousePos = Input.mousePosition;

        curr = 1f-Vector2.Distance(screenPos, mousePos)/(res);

        vignette.intensity.value = curr;
    }
((a.x−b.x)2+(a.y−b.y)2)\begin{aligned} \sqrt{((a.x-b.x)^2 + (a.y- b.y)^2)} \end{aligned}

대응 코드

여러 객체에서 해당 함수를 호출해야 하기에 전역번수로 Transform 리스트를 선언하여
거리를 비교해 해결했다.
다만 아쉬운 점은 dist는 두 점 사이의 거리를 재는 함수인데 식은 다음과 같다
루트 계산 이전에 판별 할 수 있기에 불필요한 연산이 들어갔다.
그래서 다음과 같이 개선하였다.

    public void MouseTraceVignette()
    {

        Vector2 pos = Vector2.one;
        float cDist = float.MaxValue;
        for (int i = 0; i < tracers.Count; i++)
        {
            if (tracers[i].IsDestroyed()) return;
            Vector2 tempScreenPos = Camera.main.WorldToScreenPoint(tracers[i].position);
            float x = tempScreenPos.x - Input.mousePosition.x;
            float y = tempScreenPos.y - Input.mousePosition.y;

            float tempdist = (x * x) + (y * y);
            if (cDist > tempdist)
            {
                cDist = tempdist;
                pos = tracers[i].transform.position;
            }
        }

        curr = 1f-(Mathf.Sqrt(cDist) / res);

        vignette.intensity.value = curr;
    }

최종 수정 코드

루트를 최종 연산에 사용하도록 개선하였다.

    1. 오늘 학습 키워드
    • 기획 변경 대응
    1. 오늘 학습 한 내용을 나만의 언어로 정리하기
    • 꺼진불도 다시보자.
    1. 학습하며 겪었던 문제점 & 에러
    • 문제&에러에 대한 정의
      • 불필요한 루트연산
    • 내가 한 시도와 해결 방법
      • 루트 이전에 제곱값에서 해결 할 수 있기에 연산을 최소화 하였다.
    • 이 문제&에러를 다시 만나게 되었다면?
      • 순수 거리비교 단계에선 루트 이전의 값을 비교할 것 같다.
    1. 내일 학습 할 것은 무엇인지
    • 내일은 드디어 발표다. 다른팀이 힘쓴부분을 찾고 내가 할 수 있는 부분을 찾아보고 신기한 부분들을 연구 해볼 것 같다.
profile
C# 클라이언트 프로그래밍 지망

0개의 댓글