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

Hants님의 프로필 이미지
Hants

작성한 질문수

유니티와 C#으로 배우는 카타나제로스타일 게임만들기 (기본편)

공격이펙트마무리

공격후에 미끄러지는 오류

작성

·

87

·

수정됨

0

공격이펙트 마무리 강의를 마쳤는데, 공격시 바라보는 방향으로 힘이 주어져서 더 빨리 이동하는데, 딱 딱 대시하고 멈추지가않고, 스르륵 미끄러집니다. 무엇이 문제일까요?


using System.Collections;

using System.Collections.Generic;

using System.IO;

using UnityEditor;

using UnityEngine;

using UnityEngine.UIElements;

public class Player : MonoBehaviour

{

public float speed = 5;

public float jumpUp = 1;

public float power = 5;

public Vector3 direction; //방향을 위한 Vector3형 변수

public GameObject slash;

Animator pAnimator; //애니메이션 관리를 위함

Rigidbody2D pRig2D; //물리효과처리 +

SpriteRenderer sp;

void Start()

{

pAnimator = GetComponent<Animator>();

pRig2D = GetComponent<Rigidbody2D>();

direction = Vector2.zero;

sp = GetComponent<SpriteRenderer>();

}

void KeyInput()

{

direction.x = Input.GetAxisRaw("Horizontal");

if (direction.x < 0)

{

//left

sp.flipX = true;

pAnimator.SetBool("Run", true);

}

else if (direction.x > 0)

{

//right

sp.flipX = false;

pAnimator.SetBool("Run", true);

}

else if (direction.x == 0)

{

pAnimator.SetBool("Run", false);

}

if (Input.GetMouseButtonDown(0))

{

pAnimator.SetTrigger("Attack");

}

}

void Update()

{

//클래스 사용

KeyInput();

Move();

if (Input.GetKeyDown(KeyCode.W))//W키 눌렀을때

{

if (pAnimator.GetBool("Jump") == false)

{

Jump();

pAnimator.SetBool("Jump", true);

}

}

}

private void FixedUpdate()

{

Debug.DrawRay(pRig2D.position, Vector3.down, new Color(0, 1, 0));

RaycastHit2D rayHit = Physics2D.Raycast(pRig2D.position, Vector3.down, 1, LayerMask.GetMask("Ground"));

if (pRig2D.velocity.y < 0)

{

if (rayHit.collider != null)

{

if (rayHit.distance < 0.7f)

{

pAnimator.SetBool("Jump", false);

}

}

}

}

//움직임 함수

public void Move()

{

transform.position += direction speed Time.deltaTime;

}

public void AttSlash()

{

//플레이어 오른쪽

if (sp.flipX == false)

{

pRig2D.AddForce(Vector2.right * power, ForceMode2D.Impulse);

GameObject go = Instantiate(slash, transform.position, Quaternion.identity);

go.GetComponent<SpriteRenderer>().flipX = sp.flipX;

}

else //왼쪽

{

pRig2D.AddForce(Vector2.left * power, ForceMode2D.Impulse);

GameObject go = Instantiate(slash, transform.position, Quaternion.identity);

go.GetComponent<SpriteRenderer>().flipX = sp.flipX;

}

}

//점프 함수

public void Jump()

{

//벡터값 제로

pRig2D.velocity = Vector2.zero; //제로로 해줘야 이전에 있던 값(힘)이 사라진다?

//위로 힘 가해주기

pRig2D.AddForce(new Vector2(0, jumpUp), ForceMode2D.Impulse);

}

}

 

답변 1

0

Hants님의 프로필 이미지
Hants
질문자

영상을 몇번 돌려보니, Player의 Mass가 2, JumpUp이 10이더군요, 저는 Mass를1, JumpUp을 5로 했었는데, Mass를 2로 바꾸고 나니까 조금 더 자연스러운 것 같습니다.
영상에선 저처럼 마구잡이로 좌우로 안움직이기도하고 확대가 안되서, 미끄러지는지아닌지 모르겠다만, 제건 좌우막 움직이면서 공격하면 아직도 조금 미끄러지긴하는데, 제가 바꾼방식이 문제의 원인해결이 맞을지 잘 모르겠어요

Hants님의 프로필 이미지
Hants

작성한 질문수

질문하기