Giant vs Human 팀프로젝트 개발일지

[Giant vs Human 팀프로젝트/Unity] 줄타기 수정

다모아 2023. 12. 18. 18:24

1. 구현하고싶었던 줄타기

구현하고싶었던 줄타기이다.

 

이 DAVIGO의 게임에서의 줄타기 규칙

1. 맨 윗층 벽에 줄타기를하면 벽에 닿았을 때 살짝 앞으로 가며 위로 점프한다.

2. 중간에서 중간아랫벽에 닿았을 때 위로 점프만 한다.

 

이것이 내가 DAVIGO를 보고 세운 규칙이다.

 


2. AddForce [World 기준]

AddForce는 World 중심으로 position을 받는 것이었다.

 

도움받은 글

https://discussions.unity.com/t/addforce-in-local-space/12023

 

Addforce in local space?

hey, how do you change a addforce from global to local? heres what i have at the moment this.rigidbody.AddForce(0,-1000,0); Instead of it going straight down i'd like it to go along its -z axis. :)

discussions.unity.com

 

그래서 계속 localPositon으로해도 그냥 position으로해도 튕겨나가길래 왜그런가 싶어서 검색해보니까

AddForce는 World 중심으로 하는거라 세계중심축으로 position에 힘을 가하는 것이었다.


3. AddRelativeForce [Local 기준]

 

AddForce를 AddRelativeForce로 바꾸니까 Local 기준으로 바뀌어서 잘 점프가 작용하는 것을 볼 수 있다.

 

아주 내가 원하는대로 잘 작동한다!


3. 마우스 우클릭 누르고 있을 때 줄타기가 되고 닿으면 줄이 사라짐

 

기존 문제점

기존 줄타기는 마우스 우클릭을 누르고 있으면 줄이 끊기지 않았다.

 

해결방법

아래 코드에서와 같이 isHit라는 Bool 값을 추가해서 false 상태일 때는 우클릭을 누르고 있을 때 줄타기를 하고

true 상태에서는 SwapSettingDefault()라는 메서드를 불러와주고 있다.

SwapSettingDefault()는 줄타기의 줄을 보여주지 않는 역할과 중력을 다시 되돌려주는 역할을 해주고 있다.

 

높은 벽과 중간에서 아래 벽에 닿았을 때 isHit를 true로 만들어줬다.

 

NormalWall과 HighWall은 Collider로 구분해서 만들어줬다.

 

3-1.SwapSettingDefault()

SwapSettingDefault는 라인렌더러를 false해주고 elapsedTime을 0으로 만들어주고 rigidbody의 useGravity [중력]을 true 상태로 만들어주는 것이다.


4. isWireWalk를 해주는 이유

isWireWalk를 해주지 않으면 오른쪽마우스 버튼을 누르는 상황이 아니라 벽에 그냥 부딪히는 상황에서도 OnCollisionEnter가 되어버려서 점프가 되어버리기 때문에 isWireWalk로 그런 현상이 발생되지 않게 해주었다.

 

마우스 우클릭을 누르고 있을 경우 isWireWalk가 True 상태로 해주었다.

 

마우스 우클릭을 뗐을 경우 isWireWalk 상태를 False로 해주었다.

 

이렇게 해줌으로써 마우스 우클릭 (누르고있는상태/뗀상태)이 아닌 상태라면 벽에 닿아도 점프가 되는 현상이 안되게했다.

-------
수정해야하는 것
줄타기 마지막 위치 남기지않기
카메라 빠르게 따라오기