I am trying to create a harmonic engine script, meaning when ever I attach that script to a given gameObject it will start swinging in an harmonic motion,
So the problem is that as far as i can see unity only allow constant forces in rigidBody.AddForce so what i would like to do is change that force inside the FixedUpdate function
basically something like this will solve my problem
Start()
{
GetComponent<Rigidbody>().AddForce( ... some initial value of my force ...)
}
FixedUpdate()
{
GetComponent<Rigidbody>().ResetForce( ... current value of my force ...)
}
You can use ForceMode: Rigidbody.AddForce(Vector3 force, ForceMode mode)
and set forcemode to your liking - I think Impulse will work best for you.
Going through the documentation and tutorials it turns out that FixedUpdate + ForceMode.Force is the right answer, meaning - The ForceMode.Force is designed to by used inside FixedUpdate to simulate a force that is changing with transform and time
As for the initial conditions when the GameObject is instantiated, The momentum can be set using ForceMode.Impulse.
In case of my harmonic engine it should look like this
void Start ()
{
GetComponent<Rigidbody>().AddForce(
Amplitude * AngularSpeed * Mathf.Cos(Phase),
0, 0, ForceMode.Impulse);
}
void FixedUpdate ()
{
GetComponent<Rigidbody>().AddForce(
- Mathf.Pow(AngularSpeed, 2) * Amplitude * Mathf.Sin(AngularSpeed * Time.time + Phase),
0, 0, ForceMode.Force);
}