这是Unity的一个辅助类,它提供了一些基本的物理计算函数。这些函数用于物理学项目。
using UnityEngine;
这个类在Unity中提供了一些物理计算函数。这些函数不使用Unity的内置几何学引擎和Vector2/Vector3数学函数(除了Mathf函数)。
/// <summary>
/// A helper class for physics calculations. Students must implement the methods below.
/// Unity's built-in physics engine and Vector2/Vector3 math functions are not allowed,
/// except for Mathf functions.
/// </summary>
public static class Physics
{
/// <summary>
/// Calculates linear velocity given displacement and time.
/// </summary>
public static Vector2 CalculateVelocity(Vector2 displacement, float time)
{
return displacement / time; // TODO: Implement this)
}
/// <summary>
/// Calculates linear acceleration given initial and final velocity over time.
/// </summary>
public static Vector2 CalculateAcceleration(Vector2 initialVelocity, Vector2 finalVelocity, float time)
{
// 应该是finalVelocity - initialVelocity)/(time*timescale) , 因为unity中的velocity是具有时间比例的
return (finalVelocity - initialVelocity)/time; // TODO: Implement this
}
/// <summary>
/// Calculates displacement given initial velocity, acceleration, and time.
/// </summary>
public static Vector2 CalculateDisplacement(Vector2 initialVelocity, Vector2 acceleration, float time)
{
return (initialVelocity * time) + ((acceleration * (time * time))/2); // TODO: Implement this
}
/// <summary>
/// Calculates angular velocity given angle and time.
/// </summary>
public static float CalculateAngularVelocity(float angle, float time)
{
return(angle / time); // TODO: Implement this
}
/// <summary>
/// Calculates angular acceleration given initial and final angular velocity over time.
/// </summary>
public static float CalculateAngularAcceleration(float initialAV, float finalAV, float time)
{
return(finalAV - initialAV)/time; // TODO: Implement this
}
/// <summary>
/// Calculates centripetal acceleration of a rotating body.
/// </summary>
public static float CalculateCentripetalAcceleration(float angularVelocity, float radius)
{
return(angularVelocity * angularVelocity) * radius; // TODO: Implement this
}
/// <summary>
/// Calculates net force on an object given mass and acceleration.
/// </summary>
public static Vector2 CalculateNetForce(float mass, Vector2 acceleration)
{
return mass * acceleration; // TODO: Implement this
}
/// <summary>
/// Returns gravitational acceleration vector (e.g., downward force).
/// </summary>
public static Vector2 CalculateGravity(float gravityMagnitude)
{
return new Vector2(0f, - gravityMagnitude); // TODO: Implement this
}
}
该类中,每个函数的名字都以"Calculate"为前缀,表示它们都是用于计算的。但是,请注意其中有几个函数没有正确地实现。
这些函数中的大部分都是为了物理学项目而设计的,并为 Unity 用户提供了一些基本的物理计算函数。例如,CalculateVelocity函数可以计算给定传动和时间的线性速度,而CalculateAcceleration函数可以计算在给定初始和最终速度的时间内的加速度。同样,CalculateDisplacement函数可以通过线性速度、加速度和时间来计算移位量。
虽然这个类看起来很有用,但请注意其中一些函数仍然需要实现,最常见的是两个函数没有纠正unity上的时间尺度。
你应该使用Unity的时间尺度(Timescale),因为不使用此参数你的计算将非常的错误。
在unity中,请务必设置您的时间尺度,因为unity的初始时间尺寸是0.1秒。
评论 (0)