Clamp X position of object

Here is my code in unity 3d

moveDirection = Vector3.forward + new Vector3(Input.acceleration.x * 0.3f, 0, 0);   

// transform.position.x = Mathf.Clamp(transform.position.x, -2.0f, 2.0f);

transform.Translate(moveDirection * Time.deltaTime *9); 

A object moving forward. I want to clamp its x position.

transform.position.x = Mathf.Clamp(transform.position.x, -2.0f, 2.0f);

which gives me

error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.position.
Consider storing the value in a temporary variable

How can i clamp my object?

1 Like

2 Answers

2

In C# you can’t change the value of a member of a struct returned from a property. transform.position is a property so changing x would change it in the copy returned which is then discarded.

Do what the error message tells you to do:

   var pos = transform.position;
   pos.x =  Mathf.Clamp(transform.position.x, -2.0f, 2.0f);
   transform.position = pos;

Beat me to it. i gotta type faster. :)

It should be Vector3 pos = ..., because it is in C#.

Not in my book - I'd use var every time :)

I am totally blown away right now. When I read on the syntax difference between uJS and C#, the declaration for variable in each languages are var i : int or var i and int i respectively, I made the assumption that var will not work in C#. Just learnt something new today.

I'm guessing the choice to use var is in case position gets changed from a Vector3 to another variable type that includes a field/property for x?

Check out this 1-minute Practical video explanation -