반응형
조건
한칸 한칸씩 움직이고 통통 튀는 느낌으로 뛰게 하고싶었다.
그리고 어느 방향으로든 돌 수 있는데 이때 그 방향으로 시야를 변경시키고 싶었다.
방법
확실한 해결방법은 아니지만 1좌표씩 움직일때 점프를 하면서 이동을 하는데,
점프를 하고 내려올때 중력이 쎄지게 했다.
또 LookAt 함수로 움직일때마다 캐릭터가 그 위치를 바라볼 수 있도록 회전하게 만들었다.
코드
PlayerController.cs
물론 코드중에서 다른 내용은 뺐는데 덜빼서 이해가 안되실 수 있다.
움직임과 시야만 보여드리기 위함.
using System.Collections;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
private Rigidbody rb;
private Vector2 moveInput;
private bool isMoving = false;
public float fallMultiplier = 2.0f;
public float jumpForce = 0.3f;
void Start()
{
rb = GetComponent<Rigidbody>();
transform.position = new Vector3(0, 1, -3.35f);
}
void Update()
{
if (moveInput != Vector2.zero && !isMoving)
{
StartCoroutine(Move());
}
// 내려올때 중력 쎄게 주기
if (rb.velocity.y < 0)
{
rb.velocity += Vector3.up * Physics.gravity.y * (fallMultiplier - 1) * Time.deltaTime;
}
}
public void OnMoveInput(InputAction.CallbackContext context)
{
if (context.performed)
{
moveInput = context.ReadValue<Vector2>();
}
else if (context.canceled)
{
moveInput = Vector2.zero;
}
}
private IEnumerator Move()
{
LookAt();
isMoving = true;
Vector3 startPosition = rb.position;
Vector3 targetPosition = rb.position + new Vector3(moveInput.x, 0.35f, moveInput.y);
float duration = 0.1f;
float elapsedTime = 0;
while (elapsedTime < duration)
{
rb.MovePosition(Vector3.Lerp(startPosition, targetPosition, (elapsedTime / duration)));
elapsedTime += Time.deltaTime;
yield return null;
}
rb.MovePosition(targetPosition);
isMoving = false;
moveInput = Vector2.zero;
}
// 시점 고정
void LookAt()
{
if (moveInput != Vector2.zero)
{
// Mathf.Atan2 함수는 두 축의 각도를 라디안 단위로 계산하여 반환
float targetAngle = Mathf.Atan2(moveInput.x, moveInput.y) * Mathf.Rad2Deg;
// Quaternion.Euler() 함수는 Euler 각도(오일러 각도)를 사용하여 쿼터니언 회전을 생성
Quaternion targetRotation = Quaternion.Euler(0, targetAngle, 0);
rb.rotation = targetRotation;
}
}
}
오늘의 회고
이제 최종프로젝트 시작하는데 TIL을 어떻게 써야할지 감이 안잡힌다.
기획도 제대로 안잡히고 어려운 것 같다.
그리고 아직 부족한 것 같은데 왜 벌써 나를 졸업시키려고 하시는것인지...
저 졸업시키지마세요 스파르타!!
반응형
'Record > TIL' 카테고리의 다른 글
[C#] 확장 메서드란? (0) | 2024.07.02 |
---|---|
[C#] static 한정자 (0) | 2024.07.01 |
[Unity] 스파르타 본사 방문날 (2) | 2024.06.28 |
[Unity] 이누야샤 레퍼런스 카드전략게임 팀프로젝트 마무리 (0) | 2024.06.26 |
[Unity] 포톤으로 멀티 서버 만들어보기 (2) | 2024.06.25 |