Error CS1612
I understand that others have had this problem and the answers I am seeing are stating that I need to make a temporary variable that effects whatever I need to edit. However, I am doing this and still getting the same error.
void StopBall ()
{
if (rigidbody.velocity.x <= stopVelocityThreshold.x && rigidbody.velocity.x != 0f) {
float tempX = 0;
//Error occurs here
rigidbody.velocity.x = tempX;
Debug.Log("X Velocity Stopped");
}
if (rigidbody.velocity.z <= stopVelocityThreshold.z && rigidbody.velocity.z != 0f) {
float tempZ = 0;
//Error occurs here
rigidbody.velocity.z = tempZ;
Debug.Log("Z Velocity Stopped");
}
if (rigidbody.velocity == Vector3.zero) {
CancelInvoke();
}
}
I don't understand what I am doing wrong. Any help would be appreciated.
Answer by btmedia14 · Aug 21, 2016 at 02:55 PM
@BenLuker The velocity property retrieved in this way must be assigned to a variable before its contents can be modified - its a C# thing for assignment of value types using copies not reference to original.
A couple of options
1) Create a Vector3 variable to hold the vector, modify as needed and reassign back to rigidbody
Vector3 ballVelocity = rigidbody.velocity;
ballVelocity.x = 0; //or also update ballVelocity.y, ballVelocity.z if needed
rigidbody.velocity = ballVelocity;
2) Use rigidbody.velocity.Set(x,y,z) method instead. So, if only changing x value:
rigidbody.velocity.Set(0, rigidbody.velocity.y, rigidbody.velocity.z);
Note, Unity recommends, in most cases, to not modify velocity vector of a rigidbody as it can interfere with the physics simulations. https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html
Your answer
Follow this Question
Related Questions
Can you make a global reference to a rigid body? 0 Answers
Proper way to set a RigidBody's maximum velocity 1 Answer
There is no velocity in my rigidbody! 0 Answers
Float speed not getting updated on FixedUpdate nor Updated and OnAnimatorMove 1 Answer
How to add rigid body forces and collision detection to SimpleCameraController 2 Answers