오늘 한 일
맵 적용 및 움직임 구상 방법
게임을 만들면서 처음 생각해볼껀 라이센스 문제
->
배포하는 거의 모든 Asset들은 Lisence문제가 있기 마련
->
그래서 FreeAsset과 CC0 Lisence문제를 해결하기 위해 "itch.io"라는 웹에서 찾으면서 CC0라이센스를 가진 Asset을 발견하고 다운
->
오늘 구상할 기능들은 플레이어가 맵에 돌아다니는게 가능하도록 하는것
->
굴곡진 장애물들이 없기 때문에 BoxCollider를 추가해 바닥의 기틀을 마련하고,
Player에게도 캡슐 Collider를 추가해줌
->
점프기능도 구현하기 위해서 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단점프가 되고 낮아지면 바닥 감지가 되지 않아서 잘 밸런스 조절?을 해주시면 되겠습니다.
이상입니다.