반응형
[게임이론]힘과 가속도에서 학습한 내용을 Unity에 적용해본다.
Unity에서 힘과 가속도 관련된 속성들은 다음과 같이 네가지 이다.
ForceMode.Force
ForceMode.Impulse
ForceMode.VelocityChange
ForceMode.Acceleration
위의 속성들의 특징은 크게 질량에 영향을 받는지 안받는지로 구분된다.
* 질량의 영향을 받는 속성 : Force, Impulse
* 질량과 무관하게 힘을 가하는 속성 : VelocityChange, Acceleration
그리고 Impulse, VelocityChange는 순간적인 힘을 가할 때 사용되며, Force와 Acceleration은 지속적으로 힘을 가할 때 사용된다.
아래의 코드는 이와 관련된 구현 예제이다.
public class ForceController : MonoBehaviour
{
private Rigidbody boxRigidbody;
private float movePower = 5f;
void Start()
{
boxRigidbody = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
//Debug.Log(boxRigidbody2D.velocity);
// impulse, force는 모두 질량에 영향을 받는다. F = m * a
// impulse : 순간적인 힘을 가할 때
// force : 지속적으로 힘을 가할 때
if (Input.GetKeyDown(KeyCode.A))
{
// impulse는 1초동안 가해진 힘의 합.
// FixedUpdate 0.02s 1초-50번 :: [Edit] - [Project Seettings] - [FixedTimeStep]
// 1초동안 힘을 50번 가해주는 것 ( Force * 50 )
// Force / Fiexed TimeStep
// 동일한 코드
//boxRigidbody.AddForce(transform.right * movePower / Time.fixedDeltaTime, ForceMode.Force);
boxRigidbody.AddForce(transform.right * movePower, ForceMode.Impulse);
}
else if (Input.GetKey(KeyCode.S))
boxRigidbody.AddForce(transform.right * movePower, ForceMode.Force);
// VelocityChange, Acceleration는 질량과 무관하게 힘을 가한다.
// VelocityChange : 순간적인 힘을 가할 때
// Acceleration : 지속적으로 힘을 가할 때
else if (Input.GetKeyDown(KeyCode.D))
{
// 동일한 코드
//boxRigidbody.AddForce(transform.right * movePower * Time.fixedDeltaTime, ForceMode.Acceleration);
boxRigidbody.AddForce(transform.right * movePower, ForceMode.VelocityChange);
// 가속도가 쌓이면 속도의 변화
}
else if (Input.GetKey(KeyCode.F))
boxRigidbody.AddForce(transform.right * movePower, ForceMode.Acceleration);
}
}
반응형
'프로그래밍 이야기 > GameDev' 카테고리의 다른 글
[게임이론] 등가속도 운동, 포물선 운동의 활용 (0) | 2021.01.18 |
---|---|
[게임이론] 등가속도 운동, 포물선 운동 (0) | 2021.01.17 |
[게임이론] 힘과 가속도 (0) | 2021.01.10 |
[게임이론] 행렬 (0) | 2021.01.02 |
[게임이론] 벡터-외적의 활용 (0) | 2020.12.31 |