x


Direction of rotation and ApplyForce

Hello, I am trying to write a function which will create a visual vector on a rigidbody. Then this vector can be rotated with mouse. When vecotr rotation is finished a force is added to that rigidbody. My code is not working and I'd like to hear tips and suggestions. Thanks in advance for your answers.

var arrowPrefab : GameObject;
var speed : int;
var forceMultiplyer : float;

private var arrowInstance : GameObject;

function Update () {
    if (Input.GetMouseButton(1)) {
       if (arrowInstance == null) {
         arrowInstance = Instantiate(arrowPrefab, transform.position, Quaternion.identity);
       }
       else {
         if (Input.GetMouseButton(0)) {
          arrowInstance.transform.Rotate(0, 0, Input.GetAxis("Mouse Y") * Time.deltaTime * speed);
         }
         else {
          arrowInstance.transform.Rotate(Vector3(Input.GetAxis("Mouse Y"), Input.GetAxis("Mouse X"), 0) * Time.deltaTime * speed);
         }
       }
    }

    if (Input.GetMouseButtonUp(1)) {
       if (arrowInstance != null) {   
         var forceVector : Vector3 = new Vector3(forceMultiplyer,
                                  forceMultiplyer,
                                  forceMultiplyer);

         rigidbody.AddForce(arrowInstance.transform.rotation * forceVector);
         Destroy(arrowInstance);
       }
    }
}
more ▼

asked Oct 17 '11 at 07:56 PM

kernel_mode gravatar image

kernel_mode
1 1 1 1

(comments are locked)
10|3000 characters needed characters left

1 answer: sort newest

If your problem is the force direction (forceVector is pointing to the middle of the 3 axes), you can use arrowInstance.transform.forward:

    if (Input.GetMouseButtonUp(1)) {
       if (arrowInstance != null) {   
         rigidbody.AddForce(arrowInstance.transform.forward * forceMultiplyer);
         Destroy(arrowInstance);
       }
    }
more ▼

answered Oct 18 '11 at 01:05 AM

aldonaletto gravatar image

aldonaletto
41.4k 16 42 197

Yes, the problem is the force direction. If I use your code the force is applied wrong. I want the force vector direction to be the same with my arrowInstance direction. As I said before, arrowInstance can be rotated in 3 axes. Thanks.

Oct 18 '11 at 07:14 PM kernel_mode

And to which direction the arrow model tip is pointing to? Z, Y or X? I assumed the model tip points to Z, and thus used transform.forward. If the model tip points to Y, you must use transform.up; if points to X, transform.right. Notice that I'm talking about the arrow model: when you drag it to the scene, it comes with null rotation, and you can see to which axis the arrow tip initially points.

Oct 18 '11 at 07:44 PM aldonaletto

Oh, thanks. It was transform.up.

Oct 19 '11 at 05:43 PM kernel_mode
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x1866
x1787
x439
x292
x195

asked: Oct 17 '11 at 07:56 PM

Seen: 997 times

Last Updated: Oct 19 '11 at 05:43 PM