Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

움직일 수 있는 액터 #3

Closed
kbmhansungb opened this issue Jul 23, 2022 · 3 comments · Fixed by #30
Closed

움직일 수 있는 액터 #3

kbmhansungb opened this issue Jul 23, 2022 · 3 comments · Fixed by #30
Assignees
Labels
code c++과 블루프린트등 로직과 관련 documentation Improvements or additions to documentation

Comments

@kbmhansungb
Copy link
Owner

kbmhansungb commented Jul 23, 2022

요약

마우스의 움직임에 따라 물체를 회전하고 작동시킵니다. 물체의 반응은 마우스가 이동한 만큼 반응해야 합니다.

이동의 경우 물체를 잡고 드래그 하면, 마우스가 이동한 만큼 이동해야 합니다. 마찬가지로 회전의 경우, 축에서 멀리있는 점을 잡고 회전시키면 작게 회전하고, 축에서 가까이 있는 접을 잡고 회전하면 보다 많이 회전하게 됩니다.
- 책상위에 종이를 올린 상태에서, 손가락으로 종이를 누른 후, 손가락을 움직입니다. 종이가 이동해도, 손가락과 종이의 상대 위치는 변경되지 않습니다. 이와 유사하게, 문을 열기 위해 손으로 잡고, 문을 밀면, 문과 손의 상대위치는 크게 바뀌지 않습니다.
- 마우스는 플레이어가 컴퓨터와 상호작용하기 위한 손입니다. 위의 이유로, 플레이어가 마우스를 이용해 상호작용 한다면, 가능한 실제와 비슷한 결과를 내는 것을 목표로 합니다.

추가적으로 폰의 상태에 따라, 위의 동작이 달라질 수 있습니다.

다음을 지원할 목적으로 필요 합니다.

  • 문을 잡고 엶
  • 원판 또는 벨브를 회전
  • 작은 큐브를 움직이는 목적

다음과 같이 작동해야 합니다.

  1. 마우스 입력으로
  2. 프로퍼티에서 설정한 변수를 바탕으로
  3. 물체가 이동가능한지 검사하여, 이동시키되
  4. 자연스럽게 이동하도록 (충돌이 있을 때, 가능한 자연스럽게 위치를 보정해야 함)

작성 후 문서로 정리해야 합니다.

기능에 대한 묘사

문을 연다

  1. (Player)문을 클릭하고 드래그 한다.
  2. (Movement)문을 마우스의 상대 좌표에 도달하도록 회전시킵니다.
    • 일반적으로 문은 회전축을 기준으로 회전하도록 되어 있습니다. 회전축은 Yaw이며 XYZ Axis, Roll, Pitch는 무시됩니다.

원판을 회전시킨다

  1. (Player)원판의 한 축을 클릭하고 드래그 한다.
  2. (Movement)원판을 마우스의 상대 좌표에 도달하도록 원판을 회전시킵니다.

작은 큐브를 움직인다

  1. (Player)작은 큐브를 클릭하고 드래그 합니다.
  2. (Movement) 평면 위의 움직임을 나타내게 됩니다.
@kbmhansungb kbmhansungb added the code c++과 블루프린트등 로직과 관련 label Jul 23, 2022
@kbmhansungb kbmhansungb added the documentation Improvements or additions to documentation label Jul 24, 2022
@kbmhansungb kbmhansungb self-assigned this Jul 25, 2022
@kbmhansungb
Copy link
Owner Author

kbmhansungb commented Jul 25, 2022

계획

Component에 따라 다른 움직일 수 있는 공간상의 좌표를 가지고 Movement의 트렌스폼을 조절하여 작동하는 방식을 이용합니다.

  1. (Player)움직이고자 하는 액터 또는 컴포넌트를 클릭합니다.
  2. (Movement)마우스와 좌표로 부터 상대좌표를 구합니다.
  3. (Movement)현재 마우스 위치로 부터 새로운 트렌스폼을 구합니다.
  4. (Movement)상대좌표를 이용해서 새로운 트렌스폼으로 이동시킵니다.
    1. (Movement)한 틱당 움직일 수 있는 양을 기준으로 이동시킵니다.
    2. (Movement)움직이는 공간상의 제약을 적용합니다.
    3. (Movement)충돌에 의한 물체의 이동을 재현합니다.
  • 마우스를 클릭이벤트는 클라이언트에서 호출됩니다.
  • 2에서 상대좌표를 구하지 않고 Movement를 현재 좌표로 이동시키면, 네모난 박스가 있고 옆으로 이동시킬 때, Movement의 포지션이 마우스 움직임과 움직일 수 있는 공간상의 좌표의 교차점으로 이동하게 됩니다.

추가적인 과제

  • 어떻게 테스트할 것인가?
  • 더 간결한 방법은 없는가?
  • 힘에 부쳐 느리게 움직이는 물체를 어떻게 표현할 것인가?

그외
Physics constraint도 원하는 결과를 얻을 수 있는지 확인해봐야 하나,

  1. 개인 프로젝트,
  2. 공부를 위해서,
  3. 시뮬레이션을 사용하면 제어할 수 없음,

의 이유로 구현.
단 흔들리되 게임에 영향을 주지 않는 오브젝트의 경우 피직스 컨스트레인 컴포넌트를 사용하도록 함

@kbmhansungb
Copy link
Owner Author

kbmhansungb commented Jul 26, 2022

classDiagram

HorrorMoveableInterface <|.. PlaneMoveable  
HorrorMoveableInterface <|.. CylinderMoveable  
HorrorMoveableInterface <|.. SphereMoveable  
HorrorMoveableInterface : +PreMovement(...) 
HorrorMoveableInterface : +PostMovement(...) 
HorrorMoveableInterface : +GetIntersection(...)
HorrorMoveableInterface : +ApplyMovement(...)
HorrorMoveableInterface : +ClampMovement(...)
HorrorMoveableInterface : +AdjustMovement(...)

추가적인 과제

  • 두 명이 동시에 움직일 경우에는?
classDiagram

HorrorMovingInterface <|.. HorrorMovingComponent
HorrorMovingInterface : +StartMoving()
HorrorMovingInterface : +EndMoving()

@kbmhansungb
Copy link
Owner Author

언리얼에서 특정컴포넌트의 포지션과 회전이 변경되었을때 모든자식 컴포넌트의 콜리젼을 포함하여 충돌하는지 알아야 합니다.

삽질끝에 내린결론은 자신을 포함한 모든 자식컴포넌트에서 프리미티브 컴포넌트인경우 월드의 컴포넌트 스윕으로 검사하는 것입니다. (필요한 이그노어 설정 후)

여기서 제가 궁금한것은

  1. 조금더 편한 방법이 있는가?
  2. 충돌값을 가지고 자연스럽게 위치가 수정된 결과를 얻는 방법은? 예로 책상위에 종이를 손가락으로 누르고 움직일때 종이가 물체에 저항되어 로테이션이 변경되는 것을 예로 들 수 있습니다.

공부할 목적으로 피직스 컨스트레인을 사용하지 않고 만들고 있었습니다.

  1. 추가적으로 피직스 컨스트레인의 코드 작동을 설명한 내용이 있는지 궁금합니다.

ㅠ.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
code c++과 블루프린트등 로직과 관련 documentation Improvements or additions to documentation
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant