• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

안녕하세요 혹시 저와같은 궁금증 갖고계신분 있나요?

22.10.25 13:35 작성 조회수 381

0

안녕하세요. 취미로 유니티 배우고있는 사람입니다.

transform.rotation = Quaternion.Slerp(transform.rotation , Quaternion.LookRotation(Vector3.forward), 0.2f);

위 코드로 캐릭터 조작하면 대각선 방향 바라보다가

반대 대각선 방향 (WA누르다 SD) SD키를 "동시에" 누르면

캐릭터가 WA방향 대각선 방향에서 회전하지 않는 것 같아서

(SD키가 눌렸음에도 WA방향을 바라봄.)

문제상황:

https://youtu.be/8mr5c0x5Af8

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;

public class PlayerController : MonoBehaviour
{
    float _speed = 10f;
    float h, v;

    void Start()
    {

    }


    void Update()
    {
        h = Input.GetAxisRaw("Horizontal");
        v = Input.GetAxisRaw("Vertical");
        transform.position += new Vector3(h*_speed*Time.deltaTime, 0f, v * _speed * Time.deltaTime);
        if(h!= 0f || v != 0f) // 추가안하면 입력없을때 vector3(0,0,0)방향 바라보기때문에 입력 있을때만 회전하게
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(new Vector3(h, 0, v)),20f*Time.deltaTime);
    }
}

 

이런식으로하니 해결되긴했는데.

영 찝찝하네요 혹시 다른방법으로 해결하신분 계시면

알려주시면 감사하겠습니다(_ _)

답변 1

답변을 작성해보세요.

0

수정하신 방안으로 만드시면 동작은 잘 하지만,
대각선 이동이 그냥 수평 이동보다 빨라지는 문제가 발생합니다.
(물론 강의에서도 딱히 두 키 동시 이동을 고려해서 만든 것은 아니구요.)

키보드 입력에 따라 상하좌우 방향의 방향 벡터를 더한 결과물 벡터를 구한 다음,
그 벡터를 normalize해서 그 방향으로 speed *deltaTime을 곱해주시면 되겠습니다.