강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

박준후님의 프로필 이미지
박준후

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

Rotation

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

작성

·

618

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

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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

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

박준후님의 프로필 이미지
박준후

작성한 질문수

질문하기