using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
public float maxSpeed;
Rigidbody2D rigid;
SpriteRenderer spriteRenderer;
Animator anim;
void Awake()
{
rigid = GetComponent();
spriteRenderer = GetComponent();
anim = GetComponent();
}
void Update()
{
//Stop Speed
if(Input.GetButtonUp("Horizontal"))
{
rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.5f, rigid.velocity.y);
}
//Direction sprite
if(Input.GetButtonDown("Horizontal"))
spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == 1;
//Animation
if (Mathf.Abs(rigid.velocity.x)
anim.SetBool("Run", false);
else
anim.SetBool("Run", true);
}
void FixedUpdate()
{
//Move Speed
float h = Input.GetAxisRaw("Horizontal");
rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
//Max Speed
if (rigid.velocity.x > maxSpeed) //Right Max Speed
rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
else if (rigid.velocity.x
rigid.velocity = new Vector2(maxSpeed * (-1), rigid.velocity.y);
}
}
이동방향과 SpriteRenderer의 방향이 맞지 않다는 말씀이신가요?
좌로 이동하면 캐릭터 방향도 좌로 바뀌어야하는데 키가 빠르게 입력되거나 동시에 입력되면 방향은 왼쪽을 보면서 오른쪽으로 감
댓글 보니 GetButtonDown 조건에서 처리하려면 현재 방향키 눌림 상태 변수를 갖고 있어야겠네. 가령 왼쪽 누르고 있는 상태에서 오른쪽만 눌렀다가 뗄 경우 처리
spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == 1; 밖에 없네.. GetAxisRaw값을 Log 찍어보세요.
어떻게하는건가여 ㅠ
if (Input.GetButtonDown("Horizontal")) { bool isLeft = Input.GetAxisRaw("Horizontal") == 1; Debug.Log(isLeft ? "왼쪽으로" : "오른쪽으로"); spriteRenderer.flipX = isLeft; }
이렇게 확인해보면 되나요??
도트 이미지 커엽다 ㄷㄷ
실행해보지 않아서 확신은 못하겠지만, 버튼 다운은 키가 입력되는 시점에 검출되는 것입니다. 왼쪽을 누른 상태에서 오른쪽을 누르면 업데이트문의 스프라이트 플립은 왼쪽을 바라보게 했다가 오른쪽을 바라보게 하겠군요. 하지만 GetAxisRaw는 좌우 키를 누르고 있는 모든걸 다 받는걸로 기억합니다. 그러면 왼쪽을 누른뒤에 오른쪽을 누르면 플립에서는 오른쪽 키가 눌리는 시점에서 스프라이트 회전을 걸겠지만 GetAxisRaw에서는 아직 음수로 뱉어낼테니 그쪽으로 이동을 할테구요.
거기다 velocity를 직접 건드는게 아니라 AddForce니까 왼쪽을 누른 상태에서 오른쪽을 누르면 GetAxisRaw는 음수를 뱉어내다가 어느 시점부터 0을 뱉어낼테고, 그러면 AddForce는 0이 되겠죠. 그런데 그전까지 추가된 포스가 있으니 그쪽 방향으로 이동할테구요.
그냥 가장 좋은 방법은 겟버튼업과 겟버튼다운이 아니라 그냥 겟엑시스로 통일하는 거라고 생각합니다.
그리고 AddForce보다는 velocity를 직접 건드시는게 더 좋을거에요. 2D게임이라면 리지드바디에서 컨트롤하는 것보다는 Lerp를 쓰시는게 더 좋지 싶구요.
유니티 초보자라 너무 어렵네여 ㅠ 좀 더 공부를 해봐야겠네요 ㅎㅎ