현재 솔져의 하반신을 아바타마스크를 사용하여 걷기, 앉기, 점프 등에 대한 애니메이션이
상체와 별개로 실행되는 작업을 했다.
그러나 앉을 때 캐릭터는 앉는 모션을 취하지만 하반신만 작동되어 캐릭터가 공중에 떠있는 상태가 된다.
그래서 기존에 작업했던 코드를 일부 수정하였다.
원래 좌측 컨트롤키를 누르면 유닛카메라의 로컬포지션 y값이 앉기모드의 y값으로 바뀌게 만들었다.
이젠 그럴 필요없이 해당 캐릭터의 포지션 y값을 앉기모드 y값으로 바꿔주었다.
카메라는 고정되어있고, 캐릭터의 포지션 y값만 변경되어
앉기 애니메이션이 실행될 때 더이상 캐릭터는 공중에 떠있지 않으며,
카메라와 캐릭터의 포지션y값이 따로 설정되지 않게 되었다.
[UnitController.cs]
[Header("Unit Y Pos")]
// 앉기 y값은 컴포넌트창에서 따로 설정해 줌(0.5).
public float crouchPosY;
public float originPosY;
public float currCrouchPosY;
void Start()
{
// 기존의 카메라 로컬포지션y -> 캐릭터 포지션y
originPosY = gameObject.transform.position.y;
currCrouchPosY = originPosY;
}
void Crouch()
{
if (Input.GetKey(KeyCode.LeftControl))
{
isCrouch = true;
currSpeed = crouchSpeed;
currCrouchPosY = crouchPosY;
unitAnimController.IsCrouch(true);
StartCoroutine("CrouchRoutine");
}
else if (Input.GetKeyUp(KeyCode.LeftControl))
{
isCrouch = false;
currSpeed = walkSpeed;
currCrouchPosY = originPosY;
unitAnimController.IsCrouch(false);
StartCoroutine("CrouchRoutine");
}
}
IEnumerator CrouchRoutine()
{
float posX = gameObject.transform.position.x;
float posY = gameObject.transform.position.y;
float posZ = gameObject.transform.position.z;
while (posY != currCrouchPosY)
{
posY = Mathf.Lerp(posY, currCrouchPosY, 0.5f);
gameObject.transform.position = new Vector3(posX, posY, posZ);
yield return null;
}
gameObject.transform.position = new Vector3(posX, currCrouchPosY, posZ);
}
ps. 원하는대로 포지션값이 바뀐다. 하지만 Lerp에 대한 문제가 생겼다. 아무리 Lerp의 속도를 크게 바꿔보아도 속도가 변하질 않는다... 왜 그럴까...??
'Unity > Unity FPS게임 프로젝트(오버워치라이크)' 카테고리의 다른 글
[Unity 게임프로젝트] FPS게임<오버워치> - 훈련장 맵 구현(미완성) (0) | 2024.06.13 |
---|---|
[Unity 게임프로젝트] FPS게임<오버워치> - 솔져 생체장 스킬 기능 완성 (0) | 2024.06.10 |
[Unity 게임프로젝트] FPS게임<오버워치>(6) - 캐릭터 애니메이션 조정(미완성) (0) | 2024.05.29 |
[Unity 게임프로젝트] FPS게임<오버워치>(5-2) - 캐릭터 스킬 기능 활성화(미완성) (0) | 2024.05.27 |
[Untiy 게임프로젝트] FPS 게임<오버워치>(5) - 캐릭터 스킬 기능 (0) | 2024.05.23 |