[유니티_문제해결] 대쉬 시 y축 고정 혹은 y축 변경없는 이동

2023. 4. 12. 00:22·게임개발/유니티_문제해결

https://www.youtube.com/watch?v=2kFGmuPHiA0 


미리보는 결론 : 점프나 공격시에 y축을 고정 혹은 자유롭게 다루고 싶다면 graviityScale을 0으로 만들어 중력을 없애라!


●대쉬를 구현 하는데 어려움이 있었다.

- Addforce 를 순간적으로 줄지 << 자연스럽지 않음

- 공격 판정을 리지드바디를 false로 해서 피할지 << 지형을 뚫어버려서 기각

 

●이러한 것을 한번에 해결해줄 영상이 있어서 글을 쓰게 되었다. (한국어로도 찾아볼 수 있게...)

●단순히 변수와 구현방법만 보여드리고 설명 드리겠다. (구현 로직은 영상을 시청해주세요)

 

●코드 전문

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

public class Player : MonoBehaviour
{
    private bool canDash = true;
    private bool isDashing;
    private float dashingPower = 20f;
    private float dashingTime = 0.2f;
    private float dashingCooldown = 1f;

	...
	if (Input.GetKeyDown(KeyCode.C) && canDash)
        {
            StartCoroutine(Dash());
        }
	...
        
    //무적 판정 아직 없음
    private IEnumerator Dash()
    {
        
        canDash = false;
        isDashing = true;
        float originalGfavity = playerRigidbody.gravityScale;
        playerRigidbody.gravityScale = 0f;
        if (dir.x == 0)
            dir = Vector2.right;
        playerRigidbody.velocity = new Vector2(dir.x * dashingPower, 0f);
        

        yield return new WaitForSeconds(dashingTime);
        
        playerRigidbody.gravityScale = originalGfavity;
        isDashing = false;
        yield return new WaitForSeconds(dashingCooldown);
        canDash = true;
    }

}

 

●

우선 Dash를 코루틴으로 생성과 함께 동시 실행을 걸어준다. 대쉬는 Time.deltatime만큼 되는것이 아닌 변수 dashingTime 만큼 실행되어야 하기 때문이다.

임의로 c가 눌렸을 때 실행 된다. (canDash는 쿨타임이 아니라면 true이다.)

        if (Input.GetKeyDown(KeyCode.C) && canDash)
        {
            
            StartCoroutine(Dash());
        }

 

 

●Dash를 하고 있음을 알수 있게 canDash(쿨타임 계산용), isDash(동작 상태 관리용)을 초기화 해준다.

    private IEnumerator Dash()
    {
        
        canDash = false;
        isDashing = true;

 

●대쉬중에는 Y축이 변하지 않게 하기 위해 중력을 제거한다.

그 전에 원래의 중력(GravityScale) 값을 변수에 저장한다.

        float originalGfavity = playerRigidbody.gravityScale;
        playerRigidbody.gravityScale = 0f;

 

●가만히 서있을 때의 대쉬 방향을 정해주는 코드이다

//영상에는 없는 내가 조정한 코드

        if (dir.x == 0)
            dir = Vector2.right;

 

●속력을 수정, 그리고 dashingTime 후에 종료한다.

playerRigidbody.velocity = new Vector2(dir.x * dashingPower, 0f);
yield return new WaitForSeconds(dashingTime);

 

●player의 중력을 돌려 놓고 isDashing을 false로 한다. 

단, 쿨타임 계산을 위해 canDash는 new WaitForSeconds(dashingCooldown); 를 통해 dashingCooldown 후에 true로 초기화 한다.

        playerRigidbody.gravityScale = originalGfavity;
        isDashing = false;
        yield return new WaitForSeconds(dashingCooldown);
        canDash = true;

 

 

●결과

애니메이션이 없어서 조금 빈약하지만... 완성!


●감상

1.

코루틴을 안써봐서 어색하긴 했지만 쓰는 법은 쉬웠다.

하지만 어쩔 떄에 써야할지는 모르겠으므로 공부가 더 필요할 것 같다.

 

2.

y축에 velocity 를  0으로 만들어서 고정을 하려 했는데, 그냥 유니티에서 중력을 없애면... 어... 대쉬중에 적을 만나면 밀어버리려나..? 그럼 돌진시에 콜라이더를 비활성화하면 되나? 고민해봐야겠다.

'게임개발 > 유니티_문제해결' 카테고리의 다른 글

플레이어가 타일 맵에서 벗어날 때.  (0) 2023.05.24
[유니티_문제해결] 애니메이션이 두 번 재생 되는 경우  (0) 2023.05.18
[유니티_문제해결] 애니메이션 동작 중 다시 실행 (버그)  (0) 2023.04.06
'게임개발/유니티_문제해결' 카테고리의 다른 글
  • 플레이어가 타일 맵에서 벗어날 때.
  • [유니티_문제해결] 애니메이션이 두 번 재생 되는 경우
  • [유니티_문제해결] 애니메이션 동작 중 다시 실행 (버그)
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩 공부
        • TIL(Today I Learn)
        • TIL
        • 백준(C++)
        • Python
        • 알고리즘
        • 프로젝트 회고
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • Unreal 공부
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • 학교수업
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 일상
        • 주식
        • 독서
        • 일기
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
        • 책
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

    ~
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
[유니티_문제해결] 대쉬 시 y축 고정 혹은 y축 변경없는 이동
상단으로

티스토리툴바