본문 바로가기
카테고리 없음

유니티 스터디

by do_ng 2023. 4. 27.
public void jump() {
    rigid2D.velocity = Vector2.up * jumpForce;
}

캐릭터가 점프를 하기 위해서 백터의 y축 방향에 점프 강도를 곱해준 값을 velocity 에 넣어주면 된다. 

 

백터가 뭔지도 모르고 velocity 뭔지도 모르고 점프 강도를 왜 곱해줘야 되는지도 모르는데 

무작정 이러한 공식을 암기하고 코드만 따라친다고 해서 무언가를 개발할때 어떻게 해야 될 지 감이 안잡힌다.

 

따라치고 자주 보게되니까 비슷한 코드에는 익숙해지기는 하지만, 그 원리나 동작방식에 대해서 확실하게 이해가 되지 않은 상태로 넘어가게 되면 약간이라도 응용을 하는 단계에서 어려움을 겪는다. 

 

그러면 어느정도까지 이해를 하고 넘어가야 할까?

캐릭터가 점프를 하기 위해서 

첫번째 위쪽으로 이동하기 때문에 y축 방향으로 이동하는 백터를 사용한다. 

 

벡터란? 크기와 방향을 동시에 표현하는 수학적 도구

 

벡터의 크기는 화살표의 길이이며, 위치는 벡터의 요소가 아님 

 

벡터는 선형성을 가진다. 

두 벡터를 더해서 새로운 벡터를 만들거나 방향은 동일한데 숫자를 곱해 벡터의 크기를 조절

똑같은 방향이라 할지라도 벡터의 크기에 따라 캐릭터의 이동거리가 달라진다. 

 

벡터의 덧셈

두 벡터가 이동한 최종거리를 구할 수 있음

 

 

벡터의 뺄셈

두 벡터사이의 이동거리를 구할 수 있음

캐릭터 A는 (1, 2) 벡터로 이동했고, 몬스터 B는 (2, 1) 벡터로 이동했을 때 

몬스터 B와 캐릭터 A가 닿아 있는지 체크할 때  
(2, 1) - (1, 2) = (1, -1) 

x좌표는 1만큼 차이나고 y축 좌표는 -1 만큼 차이나므로 닿아 있지 않다는 것을 알 수 있음 

 

 

스칼라는 무엇인가?

방향을 갖지 않고 크기만 가짐

 

velocity(속도)는 크기와 방향을 가지고 있기 때문에 벡터이고,  

speed(속력)은 크기만 있기 때문에 스칼라이다. 

 

속력은 단위시간당 물체의 총 이동거리를 뜻하며, 

속도는 단위시간당 물체의 총 변위를 뜻한다. 

-> 추상적인 내용이라서 이해가 잘 안됨

출처 : https://ballpen.blog/%EC%86%8D%EB%A0%A5%EA%B3%BC-%EC%86%8D%EB%8F%84-%EA%B5%AC%EB%B6%84-%EC%9D%B4%EC%9C%A0/#3

 

벡터에 속도(speed)인 스칼라를 곱하면 

캐릭터가 이동한 방향을 늘릴 수도 있고 이동한 방향의 반대방향으로 이동이 가능하다. 

 

메이플의 해골 상태이상이 구현되어 있는 방식도 

(1, 1) * 1(속력) 만큼 이동을 하면 방향은 그대로 유지하면서 크기만 변화하지만, 

(1, 1) * -1(속력) 만큼 이동을 하면 방향과 크기가 변화된다. 

 

오른쪽 화살표를 누르면 정방향으로 이동을 하는데 해골 상태이상이 걸리면 역방향으로 이동하는 방식도 벡터와 스칼라를 이용해서 계산이 가능

 

 

public void jump() {
        
    // 속도 = 벡터(캐릭터가 이동할 기본 방향과 거리) * 속력
    rigid2D.velocity = new Vector2(0, 1) * jumpForce;

    // 이동한 위치 = 캐릭터의 현재위치 + 속도 
    transform.position = transform.position + rigid2D.velocity
}