미끄러짐 벡터가 과연 무엇일까?

박승우·2024년 6월 8일

자 마흔 한 번째 키워드인 '미끄러짐 벡터'를 알아 볼 것이다.

이 키워드는 이전 키워드와 같이 게임수학 키워드로 같이 알아보았다.

미끄러짐 벡터가 뭐에요

미끄러짐 벡터는 주로 물리학과 기계공학에서 사용되는 용어로, 물체가 표면을 따라 미끄러질 때의 운동을 기술하는 벡터를 의미한다. 이는 마찰력, 중력, 속도 등의 요인에 의해 결정된다고 한다.

미끄러짐 벡터는 일반적으로 다음과 같은 요소로 구성된다.

  1. 크기: 미끄러지는 속도의 크기. 얼마나 빠르게 미끄러지고 있는지를 나타낸다.
  2. 방향: 미끄러지는 방향. 물체가 어느 방향으로 미끄러지고 있는지를 나타낸다.

미끄러짐 벡터는 종종 접촉 면에서의 운동을 설명할 때 사용된다.
예를 들어, 자동차 타이어가 도로 위에서 미끄러질 때의 운동, 공이 경사면을 따라 굴러갈 때의 운동 등을 분석할 때 유용하다.

실제 코드 적용

using UnityEngine;

public class SlopeSliding : MonoBehaviour
{
    public Transform slope; // 경사면의 Transform
    public float mass = 1.0f; // 물체의 질량
    public float frictionCoefficient = 0.1f; // 마찰 계수
    public Vector3 initialVelocity = Vector3.zero; // 초기 속도
    private Vector3 velocity; // 현재 속도
    private Vector3 acceleration; // 가속도

    void Start()
    {
        // 초기 속도 설정
        velocity = initialVelocity;
    }

    void Update()
    {
        // 중력 가속도
        float g = 9.8f;
        // 경사면의 각도 계산
        float slopeAngle = Vector3.Angle(Vector3.up, slope.up);
        // 각도를 라디안으로 변환
        float slopeAngleRad = slopeAngle * Mathf.Deg2Rad;

        // 가속도 계산
        acceleration = g * (Mathf.Sin(slopeAngleRad) - frictionCoefficient * Mathf.Cos(slopeAngleRad)) * slope.forward;
        
        // 시간에 따른 속도 계산
        velocity += acceleration * Time.deltaTime;
        
        // 위치 업데이트
        transform.position += velocity * Time.deltaTime;
    }

    void OnDrawGizmos()
    {
        // 현재 속도 벡터를 그림
        Gizmos.color = Color.red;
        Gizmos.DrawLine(transform.position, transform.position + velocity);
    }
}

코드 설명

  • Start() 함수에서 초기 속도를 설정 : 0으로 세팅

  • Update() 함수에서 매 프레임마다 가속도를 계산하고, 시간에 따라 속도를 업데이트하며, 물체의 위치를 업데이트 : 각도 계산 후 라디안 변환, 가속도 계산 후에 시간에 맞춰 계산 후 위치 업데이트

결론 - 느낀 점

3D 오브젝트를 넣어서 확인 해보았는데, 우선 어떻게 미끄러지는지 어떤것에 영향이가면
미끄러질 때 상황이 어떻게 바뀌는 지 확인 하였다. 신기한 방법으로 한 것 같지만
다양한 상황에 많이 쓰일 것 같아서 많이 사용해보아야 겠다.

profile
게임을 좋아하는 사람 입니다!

0개의 댓글