게임에서 캐릭터가 땅에 서 있는지 판정하는 건 아주 기본적이지만, 생각보다 정확하게 구현하기가 까다롭다.특히 박스 콜라이더(BoxCollider)를 쓸 때, 한 지점만 검사하면 경사로나 돌출부 때문에 의도치 않은 결과가 나올 수 있기 때문에 문제가 생각보다 빈번하게 발생한다.이번 글에서는 박스 콜라이더 바닥 여러 위치에서 Raycast를 쏴서 안정적으로 바닥을 감지하는 방법을 소개한다.왜 여러 위치에서 체크해야 할까?박스 콜라이더는 사각형 모양이라, 바닥에 완벽하게 평평하게 닿지 않는 경우가 많다.한 지점만 검사하면 캐릭터가 바닥에 붙어있어도 감지 못할 수 있고, 경사진 지형에서 문제를 일으킨다.그래서 콜라이더 바닥 주변의 8개 위치(네 구석과 네 중간 지점)에서 짧은 Raycast를 쏴서 하나라도 닿으..
반응형
게임에서 캐릭터가 땅에 서 있는지 판정하는 건 아주 기본적이지만, 생각보다 정확하게 구현하기가 까다롭다. 특히 박스 콜라이더(BoxCollider)를 쓸 때, 한 지점만 검사하면 경사로나 돌출부 때문에 의도치 않은 결과가 나올 수 있기 때문에 문제가 생각보다 빈번하게 발생한다.
이번 글에서는 박스 콜라이더 바닥 여러 위치에서 Raycast를 쏴서 안정적으로 바닥을 감지하는 방법을 소개한다.
왜 여러 위치에서 체크해야 할까?
박스 콜라이더는 사각형 모양이라, 바닥에 완벽하게 평평하게 닿지 않는 경우가 많다. 한 지점만 검사하면 캐릭터가 바닥에 붙어있어도 감지 못할 수 있고, 경사진 지형에서 문제를 일으킨다.
그래서 콜라이더 바닥 주변의 8개 위치(네 구석과 네 중간 지점)에서 짧은 Raycast를 쏴서 하나라도 닿으면 바닥에 닿았다고 판단한다.
코드 예제
internal bool CanJump()
{
var bounds = _boxCollider.bounds;
var min = bounds.min;
var max = bounds.max;
var center = bounds.center;
int groundLayerMask = LayerMask.GetMask("Ground");
List<Vector3> checkPoints = new List<Vector3>
{
new Vector3(min.x, min.y + 0.05f, min.z),
new Vector3(center.x, min.y + 0.05f, min.z),
new Vector3(max.x, min.y + 0.05f, min.z),
new Vector3(min.x, min.y + 0.05f, center.z),
new Vector3(max.x, min.y + 0.05f, center.z),
new Vector3(min.x, min.y + 0.05f, max.z),
new Vector3(center.x, min.y + 0.05f, max.z),
new Vector3(max.x, min.y + 0.05f, max.z)
};
foreach (var point in checkPoints)
{
if (Physics.Raycast(point, Vector3.down, 0.05f, groundLayerMask))
return true;
}
return false;
}
이번 포스트에서는 2D 애니메이션에 대해서 알아보겠다. Project창에서 우클릭 → Create 하면 Animation관련 데이터를 생성할 수 있다. 먼저 Animation을 생성한다는건 Animation Clip 을 생성한다는것이다.Animation Clip우선 Animation Clip을 자세히 보기 위해선 Animation 창을 열어야 한다.Window → Animation → Animation에서 열 수 있다. 그 이후 Animator Controller 컴포넌트가 장착된 게임 오브젝트를 클릭하면Animation창에서 해당 Anim Controller에 들어가있는애니메이션을 미리보기할 수 있는 기능들이 모여있다.보고 싶은 애니메이션을 설정할 수 있다. 오른쪽에 있는 것들은 특정 프레임에 이벤트를..
반응형
이번 포스트에서는 2D 애니메이션에 대해서 알아보겠다.
Project창에서 우클릭 → Create 하면 Animation관련 데이터를 생성할 수 있다.
먼저 Animation을 생성한다는건 Animation Clip 을 생성한다는것이다.
Animation Clip
우선 Animation Clip을 자세히 보기 위해선 Animation 창을 열어야 한다.
Window → Animation → Animation에서 열 수 있다.
그 이후 Animator Controller 컴포넌트가 장착된 게임 오브젝트를 클릭하면
Animation창에서 해당 Anim Controller에 들어가있는
애니메이션을 미리보기할 수 있는 기능들이 모여있다.
보고 싶은 애니메이션을 설정할 수 있다. 오른쪽에 있는 것들은 특정 프레임에 이벤트를 삽입하는 기능이다. (이벤트는 스크립트의 특정 함수를 호출하는 등 다양한 이벤트가 있다.)
현재 Clip에서 사용되는 게임 오브젝트의 속성들이다. 이곳에서 게임 오브젝트에 달려있는 웬만한 컴포넌트들을 조작할 수 있다.
실제 애니메이션이 실행될 때 프레임별로 기능들을 보여주는 곳이다. 사진처럼 Sprite들이 보통 있고 Position이나 Scale 등을 수정하는 경우도 많다.
DopeSheet는 현재 사진처럼 각 프레임별로 어떤 동작을 하는지 볼 수 있고 Curves는 프레임별로 이전, 다음 프레임과의 동작 연결시키는 시간을 조절할 수 있다. (만약 Scale이나 Position을 Clip에서 사용하며 프레임에 2개이상 있을 때 나올것이다. 첫 프레임에서 Scale.X를 3으로 했다가 두 번째 프레임에서 5로 설정한다 쳤을 때 다음 프레임으로 전환될 때 3에서 5로 즉시 전환될 지 3... 4... 5... 이런식으로 전환될지를 설정할 수 있다.)
Animator
Animator Controller를 두번 클릭하면 해당 Animator에 관련해서 창이 열린다.
Layer같은 경우 여러 애니메이션을 동시에 실행시키고 싶을 때 사용한다.
예를 들어 하체는 달리기, 상체는 활 쏘기, 휘두르기 등을 분리시켜 동시에 실행시킬 수 있다.
왼쪽에는 Animation을 전환할 때 사용될 조건문에 들어갈 변수들이다.
흔히 아는 int, float, bool을 주로 사용한다.
오른쪽 창에 뭔가 많은데 주황색, 회색 박스들이 Animation Clip 또는 Clip 전환용 State이다.
주황색 박스는 기본 State로 Animator가 실행될 때 가장 처음 연결될 State이다.
각 박스마다 화살표가 연결되어있는데 이는 State 전환 방향을 의미하며 현재 State에서 연결된 State로 전환될 수 있음을 뜻한다.
해당 State에 Parameter를 넣어서 조건문을 달아줄 수도 있다.
화살표를 클릭하면 나오는 Inspector이다.
디버깅 용으로만 사용되는 Solo와 Mute이다.
Solo: 해당 트랜지션이나 상태만 단독으로 재생하도록 설정한다.
Mute: 해당 트랜지션이나 상태를 무시하고 재생되지 않게 함
애니메이션끼리 전환될 때 설정하는 부분이다.
Has Exit Time: 전환되기 전 실행되고 있는 애니메이션을 다 끝낸 다음에 넘어갈지를 결정한다.
Exit Time: 애니메이션 전환 시간(0초면 애니메이션 종료, Has Exit time이 설정된 경우에만 켜짐)
유니티로 모바일 게임 개발을 하기 위해 안드로이드 스튜디오의 가상 디바이스를 쓰려고 하는데눈씻고 찾아봐도 Run Device에 나오지 않는다. 그래서 문제점은 sdk라고 가정하고 안드로이드 스튜디오의 sdk를 직접 설정해주었더니 해결되었다.sdk 설치 및 설정우측 위 톱니바퀴 → SDK Manager → Languages & Frameworks → Android SDK 에서 설치 및 설정할 수 있다.SDK Platforms에서 원하는 SDK를 설치한 뒤 SDK Tools에서 아래의 것들을 체크해준다.Android SDK Platform ToolsGoogle USB DriverAndroid SDK Command-line Tools (latest)나머지는 아마 기본으로 설정되어있을것이다. 이후에 유니티로 ..
반응형
유니티로 모바일 게임 개발을 하기 위해 안드로이드 스튜디오의 가상 디바이스를 쓰려고 하는데
눈씻고 찾아봐도 Run Device에 나오지 않는다.
그래서 문제점은 sdk라고 가정하고 안드로이드 스튜디오의 sdk를 직접 설정해주었더니 해결되었다.
sdk 설치 및 설정
우측 위 톱니바퀴 → SDK Manager → Languages & Frameworks → Android SDK 에서 설치 및 설정할 수 있다.
SDK Platforms에서 원하는 SDK를 설치한 뒤 SDK Tools에서 아래의 것들을 체크해준다.
Android SDK Platform Tools
Google USB Driver
Android SDK Command-line Tools (latest)
나머지는 아마 기본으로 설정되어있을것이다.
이후에 유니티로 돌아와 안드로이드 스튜디오의 SDK로 설정을 해준다.
Preferences → External Tools → SDK 설정을 직접 다운 받은 sdk로 설정
UGUI앞에 gameobejct 렌더링하는 방법은 쉽게 찾아볼 수 있지만Ui Document위에 렌더링 하는 방법은 해외를 포함해 자료가 별로 없습니다 여러번 찾아본 결과 UGUI랑 크게 다를건 없다는걸 알았습니다 방식은 raw image와 render texture를 사용하는겁니다. 카메라의 culling mask는 게임 오브젝트 카메라만 신경쓰면 됩니다.저같은 경우 게임 오브젝트의 레이어와 Default 두개만 했습니다. 저 가운데에 있는 탄지로가 게임 오브젝트이고 나머지가 ui document입니다.
반응형
UGUI앞에 gameobejct 렌더링하는 방법은 쉽게 찾아볼 수 있지만
Ui Document위에 렌더링 하는 방법은 해외를 포함해 자료가 별로 없습니다
여러번 찾아본 결과 UGUI랑 크게 다를건 없다는걸 알았습니다
방식은 raw image와 render texture를 사용하는겁니다.
ui document panel settings 및 카메라 render texture 설정
결론부터 말씀드리자면 제가 스크립트 하나짯는데 이거 사용하시면 됩니다. "버전"이라고 적혀있는 부분만 자신이 사용하고 있는 버전에 맞게 바꿔주세요 sed -i '' -e '8d;14d' /Applications/Unity/Hub/Editor/버전/Unity.app/Contents/Resources/ScriptTemplates/81-C\#\ Script-NewBehaviourScript.cs.txt 맨 처음 유니티 설치하고 스크립트를 만들면 Start와 Update 함수 위에 주석이 달려있는데 매번 스크립트를 만들때마다 나타나서 짜증나죠 지우는 방법이 있습니다 윈도우와 맥 둘다 같은 방법이지만 경로가 다르니 주의해 주세요 C# 스크립트의 기본 파일이 담겨져있는 경로는 저렇게 되어있습니다. Editor 뒤에..
반응형
결론부터 말씀드리자면 제가 스크립트 하나짯는데 이거 사용하시면 됩니다.
"버전"이라고 적혀있는 부분만 자신이 사용하고 있는 버전에 맞게 바꿔주세요
sed -i '' -e '8d;14d' /Applications/Unity/Hub/Editor/버전/Unity.app/Contents/Resources/ScriptTemplates/81-C\#\ Script-NewBehaviourScript.cs.txt
맨 처음 유니티 설치하고 스크립트를 만들면 Start와 Update 함수 위에 주석이 달려있는데
매번 스크립트를 만들때마다 나타나서 짜증나죠
지우는 방법이 있습니다
윈도우와 맥 둘다 같은 방법이지만 경로가 다르니 주의해 주세요
C# 스크립트의 기본 파일이 담겨져있는 경로는 저렇게 되어있습니다.
Editor 뒤에 유니티 버전이 딸려오는데 확인하고 바꿔주시면 됩니다.
cd /Applications/Unity/Hub/Editor/2022.3.15f1/Unity.app/Contents/Resources/ScriptTemplates
cd 로 디렉토리에 들어가면 파일들이 잔뜩있는데 81로 시작하는 파일을 수정해 주시면 됩니다.
애니메이션 컨트롤러에서 Make Transition을 했을 때 현재 애니메이션에서다른 애니메이션으로 방향을 정해줄 수 있습니다. 보면 Run 애니메이션과 Wait애니메이션이 서로를 가리키고 있는데 가리키는 화살표를 눌러보면위 사진처럼 Inspector 창에 Transition에 관한 정보가 나오는데 여기서 Has Exit Time이 뭔지, 무슨 역할을 하는지, 사용 목적은 무엇인지 한번쯤은 의문을 가집니다. Has Exit Time 정의와 역할Has Exit TimeExit Time 은 파라미터에 의존하지 않고 상태의 정규화된 시간에 의존하는 특별한 전환입니다. Exit Time 에서 지정한 시간에 전환이 발생하도록 확인해야 합니다. 유니티 공식 문서에서 가져온 내용인데 주목할 부분은 "Exit Tim..
반응형
애니메이션 컨트롤러에서 Make Transition을 했을 때 현재 애니메이션에서
다른 애니메이션으로 방향을 정해줄 수 있습니다.
출처 : 내꺼
보면 Run 애니메이션과 Wait애니메이션이 서로를 가리키고 있는데 가리키는 화살표를 눌러보면
출처 : 내꺼
위 사진처럼 Inspector 창에 Transition에 관한 정보가 나오는데 여기서 Has Exit Time이 뭔지, 무슨 역할을 하는지, 사용 목적은 무엇인지 한번쯤은 의문을 가집니다.
Has Exit Time 정의와 역할
Has Exit Time
Exit Time은 파라미터에 의존하지 않고 상태의 정규화된 시간에 의존하는 특별한 전환입니다.Exit Time에서 지정한 시간에 전환이 발생하도록 확인해야 합니다.
유니티 공식 문서에서 가져온 내용인데 주목할 부분은 "Exit Time 파라미터에 의존하지 않고 상태의 정규화된 시간에 의존하는 특별한 전환입니다."
이 말은 쉽게 말해서
애니메이터가 만든 애니메이션에는 분명 애니메이션을 촬영한 시간이 있을거란 말이죠?
현재 실행한 애니메이션을 촬영한 시간만큼 틀어주는걸 보장한다라는 의미입니다.
즉 1번 애니메이션을 Play하던중 다른 애니메이션을 틀 일이 없다 라는 말이죠
반대로 말하면 촬영한 시간 동안 다른 애니메이션은 틀 수 없다 라는 말이 됩니다.
Has Exit Time 사용 목적
Has Exit Time이 설정되지 않았다면 해당 조건을 만족할 때 Condition을 통해 다음 애니메이션으로 곧 바로 바뀌지만
Has Exit Time이 설정되어 있다면 해당 조건을 만족해도 정해진 애니메이션 시간만큼은 반드시 다 틀어준 뒤
다음 애니메이션으로 바뀌게 됩니다.
이 부분에서 생각해보면 게임 캐릭터가 뛰다가 멈추는 애니메이션 같은 경우는 Has Exit Time의 설정을 풀어주어야 하는게 맞겠고
어떤 스킬을 사용한다면 스킬 애니메이션의 시간만큼은 반드시 틀어주어야 하니 설정을 해놓아야 합니다.