본문 바로가기
반응형

물리7

유니티 - 운동하는 단진자의 로프를 끊기 (Cut the Rope) Unity 전체 링크 참고 - 쿼터니언으로 구현한 단진자의 운동 - 쿼터니언으로 구현한 단진자의 운동 확장 - 독립된 단진자의 운동 - 런타임에 단진자 운동 설정하기 - 라인 렌더러를 이용한 단진자 속도의 시각화 - 라인 렌더러로 간단한 화살표 만들기 - 운동하는 단진자의 로프를 끊기 이제 스페이스 바를 누르면 라인 렌더러(로프)가 사라져서 단진자가 자연스럽게 운동하도록 해보자. Oscillator에는 Rigidbody를 추가하고 Use Gravity를 체크해제한다. Update에서 Space Bar 키를 입력할 경우에 아래와 같이 처리한다. 이전 글에서 구한 속도를 구하는 방법으로 리지드바디에 속도를 직접 넣는다. void Update() { lrs[0].SetPosition(1, this.transf.. 2023. 4. 3.
유니티 - 라인 렌더러를 이용한 단진자 속도의 시각화 Unity 전체 링크 참고 - 쿼터니언으로 구현한 단진자의 운동 - 쿼터니언으로 구현한 단진자의 운동 확장 - 독립된 단진자의 운동 - 런타임에 단진자 운동 설정하기 - 라인 렌더러를 이용한 단진자 속도의 시각화 - 라인 렌더러로 간단한 화살표 만들기 - 운동하는 단진자의 로프를 끊기 이제 단진자의 속도를 라인 렌더러로 표현해보자. 속도가 클수록 라인의 길이가 길어진다. 속도의 크기 속도의 크기는 에너지 보존 법칙을 이용해서 구할 수 있다. 역학적 에너지는 운동 에너지(K)와 위치 에너지(U)의 합이다. 단진자가 처음 시작되는 경우에는 속도가 0이기 때문에 K = 0이 되고, 총 에너지는 다음과 같다. 여기서 h는 this.transform.position.y가 된다. 이후 h → h'가 된다면, 운동에.. 2023. 4. 3.
유니티 - 런타임에 단진자 운동 설정하기 (Runtime Independent Simple Pendulum) Unity 전체 링크 참고 - 드래그로 오브젝트 움직이기 - 쿼터니언으로 구현한 단진자의 운동 - 쿼터니언으로 구현한 단진자의 운동 확장 - 독립된 단진자의 운동 - 런타임에 단진자 운동 설정하기 마우스로 단진자를 런타임에 이동시켜서 다시 단진자 운동이 되도록 해보자. 편의상 x는 0으로 고정한다. (오브젝트 드래그가 yz 평면만 가능하도록 한다.) Start에서 했던 초기화를 initSettings로 모두 옮긴다. startRot도 여기서 0으로 초기화한다. void initSettings() { float angle = Vector3.Angle(this.transform.position - pivot.position, Vector3.down); startAngle = 0.0f; endAngle = a.. 2023. 3. 29.
유니티 - 독립된 단진자의 운동 (Independent Simple Pendulum with Unity LerpAngle) Unity 전체 링크 참고 - 쿼터니언으로 구현한 단진자의 운동 - 쿼터니언으로 구현한 단진자의 운동 확장 - 독립된 단진자의 운동 - 런타임에 단진자 운동 설정하기 쿼터니언으로 구현한 단진자의 운동의 경우 pivot을 회전시키고, pivot의 자식으로 단진자를 설정해야 한다. 이러한 제약 조건은 나중에 개발을 확장할 때 불편할 수 있다. LerpAngle 메서드를 이용하면 부모 - 자식 관계가 아닌 독립된 상태에서 단진자 운동을 구현할 수 있다. Mathf.LerpAngle도 Quaternion.Lerp와 원리가 같으므로, 시작 각도, 도착 각도가 필요하다. 그리고 최초 세 점을 지나는 평면(pivot, pivot 바로 아래, 단진자)을 저장한다. pivot → oscillator 벡터의 최초 상태는 .. 2023. 3. 29.
유니티 - 쿼터니언으로 구현한 단진자의 운동 확장 (Expanded Simple Pendulum with Unity Quaternion) Unity 전체 링크 참고 - 세 점을 지나는 평면 구하기 - 쿼터니언으로 구현한 단진자의 운동 - 쿼터니언으로 구현한 단진자의 운동 확장 - 독립된 단진자의 운동 - 런타임에 단진자 운동 설정하기 쿼터니언으로 구현한 단진자의 운동의 경우 투명한 Plane을 추가해서 그림으로 보면 아래와 같은 상황이다. (x = 0으로 고정) Plane의 설정은 현재 아래와 같다. 마찬가지로 pivot과 object의 좌표도 x = 0이다. 이제 object의 x 좌표를 변경해보자. 현재의 코드대로라면 아래와 같이 x 축이 고정된 채로 부자연스럽게 단진자 운동을 하게 된다. x = 0이라고 가정한 코드이기 때문에 수정이 필요하다 오브젝트가 어디에 있던지 간에 자연스럽게 움직일 수 있도록 해보자. 평면 추가 먼저 원할한 .. 2023. 3. 29.
유니티 - 쿼터니언으로 구현한 단진자의 운동 (Simple Pendulum with Unity Quaternion) Unity 전체 링크 참고 - 쿼터니언과 회전의 덧셈 - 쿼터니언으로 구현한 단진자의 운동 - 쿼터니언으로 구현한 단진자의 운동 확장 - 독립된 단진자의 운동 - 런타임에 단진자 운동 설정하기 빨간색 Sphere를 pivot으로 하는 단진자를 Quaternion.Lerp를 이용해서 구현해보자. 쿼터니언의 Lerp 메서드 Quaternion.Lerp(start, end, float t = [0 ~ 1])은 0에 가까우면 start의 각도가, 1에 가까우면 end의 각도가 된다. 값이 0.5라면 start와 end의 중심이 된다. 단진자는 가운데로 갈수록 속도가 커지고 양 옆에서는 속도가 0이 된다. 그리고 이것이 계속 반복된다. 이러한 조건을 잘 만족하는 함수는 삼각함수이다. 그런데 sinΘ 함수는 -1 .. 2023. 3. 29.
유니티 - 스트로보 효과 (Stroboscopic Effect with Unity) Unity 전체 링크 스트로보 효과(Stroboscopic Effect)는 착시 현상 중 하나다. 짧은 시간 내에 반복적으로 연속적인 움직임이 나타날 때 생기는 현상이다. 예를 들어 앞으로 회전하는 자동차 바퀴의 속도가 높아지면 뒤로 회전하는 것처럼 보이게 된다. 바퀴에서 나타나는 스트로보 효과를 유니티로 재현해보자. 오브젝트를 회전하는 스크립트를 Sphere에 추가하자. Range를 이용해 슬라이드 바로 rotateSpeed를 0 ~ 1500 사이가 되도록 하였다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class StroboscopicEffect : MonoBehaviour { [Rang.. 2023. 3. 26.
반응형