코딩의 신 28

김동관·2025년 11월 10일

오늘 한 일

  1. Free Asset 다운 받고 3D 맵 적용
  2. 바닥에 Collider설치와 Player 움직임 구상

맵 적용 및 움직임 구상 방법

게임을 만들면서 처음 생각해볼껀 라이센스 문제
->
배포하는 거의 모든 Asset들은 Lisence문제가 있기 마련
->
그래서 FreeAsset과 CC0 Lisence문제를 해결하기 위해 "itch.io"라는 웹에서 찾으면서 CC0라이센스를 가진 Asset을 발견하고 다운
->
오늘 구상할 기능들은 플레이어가 맵에 돌아다니는게 가능하도록 하는것
->
굴곡진 장애물들이 없기 때문에 BoxCollider를 추가해 바닥의 기틀을 마련하고,
Player에게도 캡슐 Collider를 추가해줌
->
점프기능도 구현하기 위해서 LayCast로 바닥을 감지하려는 기능을 만듦
바닥에 닿았다고 판정을 할시에 점프가 가능하도록 설정

  • CC0 (Creative Commons Zero) - 사용 권장
    비상업용/상업용 관련없이 사용 가능
    재가공 및 배포 가능
    출처 표기할 필요 없음
    가공 후 라이센스 변경 가능
    CC BY(저작권자 표시) - 저작권자 명시만 하면 사용 가능, 라이센스 변경 가능
    CC BY-SA(저작권자 표시, SA=동일조건 변경 허락(Share-Alike))

금일의 트러블 슈팅

  1. Asset을 다운 받았는데 맵이 핑크색으로 보이는 현상.
  2. Laycast로 바닥 감지를 시도했지만 점프가 되지 않는 현상.

맵이 핑크색으로 보이는 현상

<문제발생>
원래는 Asset을 다운받아서 Scene에 넣으면 바로 보여야 하는 게 맞음.
그런데 지금 핑크색으로 표시된다면, 거의 확실하게 머티리얼(Shader) 문제.

<문제해결>
Shader가 손상되었거나 Unity 버전에 맞지 않음
→ 예를 들어, URP(Universal Render Pipeline) 프로젝트에 기본(Standard) Shader를 사용하는 Asset을 넣은 경우.

Render Pipeline이 다름

프로젝트가 URP/Lit인데 Asset은 Built-in(Standard)용으로 만들어진 경우

또는 반대로, Asset은 URP인데 프로젝트는 Built-in인 경우

Material이 누락됨

Scene에 추가된 오브젝트의 Mesh Renderer → Material이 None으로 되어 있을 수도 있습니다.

<해결>
패키지 매니저에서 URP 설치

상단 메뉴 → Window → Package Manager

상단 드롭다운에서 “Unity Registry” 선택

Universal RP 검색 → Install

2️⃣ URP Asset 생성

Project 창에서 오른쪽 클릭 →
Create → Rendering → Universal Render Pipeline → Pipeline Asset (Forward Renderer)

3️⃣ Graphics 설정 연결

Edit → Project Settings → Graphics

방금 만든 URP Asset을 Scriptable Render Pipeline Settings에 드래그해서 연결

4️⃣ 머티리얼 업그레이드

상단 메뉴에서
Edit → Render Pipeline → Universal Render Pipeline → Upgrade Project Materials to URP Materials
클릭하면 기존 Material들이 자동 변환

Asset이 의도한 그래픽으로 표시됨. 해결완료.

바닥에 있지만 점프가 되지 않는 현상

    bool IsGrounded()
    {
        Ray[] rays = new Ray[4]
        {
   //transform.position + (방향 * 0.5f) + (transform.up * 0.1f)
     캐릭터 중심에서 살짝 위(up * 0.1f)로 올리고, 각 방향으로 0.5만큼 이동.
     이유: 캐릭터 발 주변 여러 지점에서 땅을 체크하기 위함.Vector3.down 레이를 아래 방향으로 쏨 → “땅 있는지 확인”
          
           new Ray(transform.position + (transform.forward * 0.5f) + (transform.up * 0.1f), Vector3.down),
           new Ray(transform.position + (-transform.forward * 0.5f) + (transform.up * 0.1f), Vector3.down),
           new Ray(transform.position + (transform.right * 0.5f) + (transform.up * 0.1f), Vector3.down),
           new Ray(transform.position + (-transform.right * 0.5f) + (transform.up * 0.1f), Vector3.down)
        };
        
	//각 Ray를 1.5 단위 길이만큼 쏘면서 groundLayerMask에 속하는 레이어와 충돌 확인 
    groundLayerMask: 땅으로 취급할 레이어만 체크하도록 제한하나라도 충돌하면 바로 true 반환 → “땅에 닿아 있음
        for (int i = 0; i < rays.Length; i++)
        {
            if (Physics.Raycast(rays[i], 1.5f, groundLayerMask))
            {
                return true;
            }
        }
        return false;
    }
    Ground와 닿지 않은 문제가 있었는데 사실 간단했습니다. if (Physics.Raycast(rays[i], 1.5f, groundLayerMask)) 여기서 1.5f의 값을 높여주니 잘 작동이 되었는데 이것보다 더 높이면 감지길이가 너무 길어져서
    2단점프가 되고 낮아지면 바닥 감지가 되지 않아서 잘 밸런스 조절?을 해주시면 되겠습니다.

이상입니다.

profile
아이디어 뱅크

0개의 댓글