[Kitchen Chaos] Collision Detection
2024. 5. 5. 01:50ㆍC# & Unity 공부
강의 영상 (2:04:08 ~ 2:17:02)
https://www.youtube.com/watch?v=AmGSEH7QcDg&t=17944s
코드
Vector2 inputVector = gameInput.GetMovementVectorNormalized();
Vector3 moveDir = new Vector3(inputVector.x, 0f, inputVector.y);
float moveDistance = moveSpeed * Time.deltaTime;
float playerRadius = .7f;
float playerHeight = 2f;
bool canMove = !Physics.CapsuleCast(transform.position, transform.position + Vector3.up * playerHeight, playerRadius, moveDir, moveDistance);
if(!canMove)
{
// Cannot move towards moveDir
//Attemp only X movement
Vector3 moveDirX = new Vector3(moveDir.x, 0, 0).normalized;
canMove = !Physics.CapsuleCast(transform.position, transform.position + Vector3.up * playerHeight, playerRadius, moveDirX, moveDistance);
if(canMove)
{
//Can move only on the X
moveDir = moveDirX;
}
else
{
//Cannot move only on the X
//Attemp only Z movement
Vector3 moveDirZ = new Vector3(0, 0, moveDir.z).normalized;
canMove = !Physics.CapsuleCast(transform.position, transform.position + Vector3.up * playerHeight, playerRadius, moveDirZ, moveDistance);
if(canMove)
{
//Can move only on the Z
moveDir = moveDirZ;
}
else
{
//Cannot move in any direction
}
}
}
if (canMove)
{
transform.position += moveDir * moveSpeed * Time.deltaTime;
}
isWalking = moveDir != Vector3.zero;
float rotateSpeed = 10f;
transform.forward = Vector3.Slerp(transform.forward, moveDir, Time.deltaTime * rotateSpeed);
}
CapsuleCast는 어떻게 다르는가?
위에서 RayCast, BoxCast, SphereCast, CapsuleCast 순이다.
즉, 파라미터 중의 거리를 나타내는 수치만큼 이동 뒤, 해당되는 Cast의 모양에 닿았을 때의 값을 bool로 반환한다.
CapsuleCast의 경우, Unity에서 나타내는 Capsule을 의미한다.
코드 작동 방법
원래 Vector로 Raycast(캡슐)를 쏘아서 닿는다면 움직일 수 없다고 상태 변수를 설정한다.
x의 성분만으로 만들어진 벡터를 이용하여 다시 Raycast를 쏜다.
이때 위와 똑같은 방법으로 x쪽 방향으로 이동 가능하면 이동하고
안되면 z의 성분으로 같은 행위를 반복한다.
궁금한점?
왜 RigidBody를 사용하여 미끄러지지 않게 하지 않고 힘들게 하는것인가?
코드의 안정성 때문에. 실행 후 처리랑 처리후 실행의 차이라고 생각하면된다.
ex) 벽뚫는 버그
'C# & Unity 공부' 카테고리의 다른 글
[Kitchen Chaos] Input System Refactor (0) | 2024.05.05 |
---|---|
[Kitchen Chaos] Cinemachine (0) | 2024.05.04 |
[Kitchen Chaos] Animations (0) | 2024.05.04 |
[Kitchen Chaos] Character Visual, Rotation (0) | 2024.05.03 |
[Kitchen Chaos] Character Controller (0) | 2024.05.03 |