크래프톤 정글 TIL : 1121

lazyArtisan·2024년 11월 21일
0

정글 TIL

목록 보기
144/147

📝 배운 것들


🏷️ POT 규격

게임에서 사용하는 텍스처는 텍스트 가로 세로 사이즈를 2의 제곱으로 제작해야 함. 그래야 불필요한 추가 연산 없다고 함. 현실적으로 불가능하니까 여러 이미지 하나에 담아서 사용.

🏷️ Collider

https://dbsckdqja75.tistory.com/39

  • 두 물체 간에 충돌이 발생하려면 적어도 한 물체에는 Rigidbody 가, 두 물체에는 Collider 가 있어야 한다.
  • IsTrigger 가 활성화된 Collider 끼리는 충돌 감지가 되지 않는다.

조건 별 Collider 작동

Collider TypeRigidbody 여부IsTrigger 여부물리 충돌이벤트 발생
Static Collider없음꺼짐가능없음
Trigger Collider없음켜짐없음가능 (OnTrigger)
Dynamic Collider있음꺼짐가능가능 (OnCollision)
Kinematic ColliderisKinematic 켜짐꺼짐 또는 켜짐없음 (수동 충돌만 가능)제한적 (Trigger만 가능)

Collider 성능 순위

  1. Sphere Collider (가장 빠름)
  2. Capsule Collider (캐릭터에 주로 사용)
  3. Box Collider (가장 많이 사용)
  4. Mesh Collider (정밀 충돌)


🎮 Frog on Lotus


개구리 좌우 반전

localScale을 반전시켰더니 혀가 반대로 가서
sprite만 반전시켜야될듯

        else if (AttackAction.triggered)
        {
            // 클릭 당시 혀와 마우스의 위치를 설정하고 각도를 구한다.
            mousePos = Camera.main.ScreenToWorldPoint(Mouse.current.position.ReadValue());
            FlipCharacter();
            tonguePos = tongue.position;
            direction = mousePos - tonguePos;
            direction.z = 0; // magnitude 왜곡 방지
            targetLength = direction.magnitude;
            angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

            // Debug.Log("tongePos : " + tonguePos);
            // Debug.Log("direction : " + direction);
            // Debug.Log("targetLength : " + targetLength);

            // 각도만큼 혀를 돌린다
            tongue.rotation = Quaternion.Euler(new Vector3(0, 0, angle));

            isAttacking = true;
            animator.SetBool("isAttacking", true);
            arrivedPoint = false;
        }

공격 했을 때 코드

    private void FlipCharacter()
    {
        bool TrueIsLeft = (mousePos.x - tongue.position.x < 0) ? true : false;

        // Debug.Log("mousePos x : " + mousePos.x);
        // Debug.Log("tonuge.position.x : " + tongue.position.x);

        // Debug.Log("TrueIsLeft : " + TrueIsLeft);
        // Debug.Log("flipX : " + frogSR.flipX);

        if (frogSR.flipX != TrueIsLeft)
        {
            if (TrueIsLeft)
            {
                Vector3 newPosition = tongue.position;
                newPosition.x -= 0.2f;
                tongue.position = newPosition;
            }
            else
            {
                Vector3 newPosition = tongue.position;
                newPosition.x += 0.2f;
                tongue.position = newPosition;
            }
        }

        frogSR.flipX = TrueIsLeft;
    }

개구리 좌우 반전 코드

중간에 mousePos 위치 때문에 초기화 안 된 상태로 계산에 참여해서 회전을 이상하게 하는 현상 있었는데 순서 바꿔서 해결

그냥 개구리 좌우 반전만 시키려면 한줄만 더 넣으면 되는데
혀 위치가 이상하길래 조정시키려다 코드가 마구 더러워짐
하지만 보이는 결과물은 더 나아졌다

혀 끝에 닿으면 파리 갖고 옴

콜라이더 늘리기

    private void ShrinkTongue()
    {
        if (tongueSR.size.x <= 0)
        {
            isAttacking = false;
            animator.SetBool("isAttacking", false);
            tongueSR.size = new Vector2(0, tongueSR.size.y);
            tongueCollider.radius = 0f; // 콜라이더 크기 0으로 돌려놓기
            tongueCollider.offset = new Vector2(0, 0);
            return;
        }

        tongueSR.size = new Vector2(tongueSR.size.x - tongueSpeed * targetLength * Time.deltaTime, tongueSR.size.y);
        tongueCollider.offset = new Vector2(tongueCollider.offset.x - tongueSpeed * targetLength * Time.deltaTime, 0);
    }

콜라이더도 혀 늘릴때랑 똑같은 로직 사용.
공격 안 하면 콜라이더 크기는 0으로.

됐다.



0개의 댓글