728x90
마찰력을 활용한 게임 요소 구현
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BoxState : MonoBehaviour
{
public PhysicsMaterial2D slopeMaterial;
private Rigidbody2D boxRigidbody2D;
private float boxMass = 0f;
private float gravity = 0f;
private float friction = 0f;
private float angle = 0f;
void Start()
{
boxRigidbody2D = GetComponent<Rigidbody2D>();
boxMass = boxRigidbody2D.mass; //질량값
gravity = 9.8f * boxRigidbody2D.gravityScale; //중력값
friction = slopeMaterial.friction; //마찰계수
angle = transform.rotation.eulerAngles.z;
//기본적으로 쿼터니언으로 각도를 받기 때문에
//쿼터니언을 오일러각으로 변경
float pushForce = boxMass * gravity * Mathf.Sin(angle * Mathf.Deg2Rad); //m*g*sin(theta), 물체를 나아가게 하는 힘
float frictionForce = friction * boxMass * gravity * Mathf.Cos(angle * Mathf.Deg2Rad); //마찰력*m*g*cos(theta), 물체가 나아가지 못하게하는 힘
Debug.Log("Push: " + pushForce + " , Friction: " + frictionForce);
if (pushForce > frictionForce)
Debug.Log("움직임");
else
Debug.Log("정지");
}
}
나아가는 힘(pushForce) > 마찰힘(frictionForce) -> 물체가 미끄러져 내려감
- pushForce = m*g*sin(theta)
- frictionForce = friction(최대정지 마찰계수)*m*g*cos(theta)
pushForce > frictionForce 인 경우
pushForce < frictionForce 인 경우
저항력을 활용한 게임 요소 구현
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum Drag { Drag, Simulation };
public class DragController : MonoBehaviour
{
public Drag ballMode;
public float dragValue;
private Rigidbody2D ballRigidbody2D;
void Start()
{
ballRigidbody2D = GetComponent<Rigidbody2D>();
ballRigidbody2D.velocity = transform.right;
}
void Update()
{
if (ballMode == Drag.Simulation)
ballRigidbody2D.velocity = ballRigidbody2D.velocity * (1 - dragValue * Time.deltaTime);
}
}
저항력 V * (1 - D * dt)
D : 항력계수, dt : 경과시간
Ball_Drag(위) : Drag값 0 / Ball_Simulation(아래) : Drag값 0.5
Ball_Drag | Ball_Simulation |
영상으로 보면 두 공 다 멈춘것 같지만 실제로 위치값을 보면 차이가 있음
Ball_Drag의 경우, Linear Sleep Tolerance값 0.01이 적용받아 멈추지만, Ball_Simuation은 매 프레임 값이 곱해져 좀더 나중에 멈춤
728x90
'게임 프로그래밍 > 유니티 프로젝트' 카테고리의 다른 글
유니티 AR Foundation을 활용한 나무쌓기 AR 게임 개발 (0) | 2022.01.07 |
---|---|
[Unity]2D게임 Background Scroll(배경 스크롤) (0) | 2021.12.30 |
[Unity]등속도/등가속도 운동을 활용한 게임 구현하기 (0) | 2021.12.30 |
[Unity]힘과 가속도의 관계와 AddForce를 활용한 게임 구현하기 (0) | 2021.12.29 |
[Unity]행렬과 Transform 이동 함수 (0) | 2021.12.29 |