x


how to ignore transform.position.y

In here I am trying to get the gameobject (dog) to come to its owners front (just like you would call a dog). I am trying to get it to ignore the players y position though. With this, the error is that the loop never breaks. When the function comeForward is called, it'll go the leaders front, but will trip out and never be still; it rapidly moves back and forth at the position.

If I just use transform.position instead of current position, it'll work, but will trip out just the same if on uneven terrain, hence my attempt to get it to ignore the y position of the leader.

function Update(){

var controller : CharacterController = GetComponent(CharacterController);
var forward = transform.TransformDirection(Vector3.forward);
moveDirection.y -= gravity * Time.deltaTime;

//etc


}if (comeHere){
animation.CrossFade("walk");
controller.SimpleMove(forward * speed);
}

}




function ComeForward(){


var currentPosition = transform.position;
    currentPosition.y = leader.position.y;
    while ( Vector3.Distance(  leader.position + leader.forward*3 , currentPosition ) >= .5) { 

        var lookPos = leader.position  - transform.position;
        lookPos.y = 0;
        var rotation = Quaternion.LookRotation(lookPos);
        transform.rotation = Quaternion.Slerp(transform.rotation, rotation, rotationSpeed); 

        comeHere = true;
        yield;
    }

    transform.LookAt(leader.position + leader.right * 5);
    animation.CrossFade("idle");
    comeHere = false;

   } 

What am I missing?

more ▼

asked Jun 23 '11 at 04:13 PM

superventure gravatar image

superventure
670 44 54 63

If you don't want to consider the vertical component why don't you just make Vector2s out of the x and z parts and compare distance with those?

Jun 23 '11 at 04:16 PM flaviusxvii

An example please?

Jun 23 '11 at 04:19 PM superventure

v3 is a Vector3

make v2 = new Vector2(v3.x, v3.z);

Now you have a position constrained to the xz plane, which i can compare against other positions on that place.. (Dog, Owner, whatever)

Jun 23 '11 at 04:21 PM flaviusxvii

Is this for Js? It wouldn't allow that code, so I made it into var Vector2 = new Vector2(Vector3.x, Vector3.z); and it still gives me error messages. I will be back in a few hours- I have to go to work. Thanks so far

Jun 23 '11 at 04:26 PM superventure

v3 is an instance of a Vector3, not the type Vector3. It wasn't any particular language. Making it work in JS should be trivial.

var xz_position:Vector2 = new Vector2(transform.position.x, transform.position.z);

Jun 23 '11 at 04:31 PM flaviusxvii
(comments are locked)
10|3000 characters needed characters left

3 answers: sort voted first
        var point2 : Vector3 = leader.position; 
       point2.y = transform.position.y;

       while (Vector3.Distance(point2 + leader.forward*3 ,  transform.position) > .5){

       transform.LookAt(point2 + leader.forward*3);

       comeHere = true;

       yield;

       }
       transform.LookAt(leader.position + leader.right * 5);
       animation.CrossFade("idle");
       comeHere = false;
       }
more ▼

answered Jun 24 '11 at 04:18 AM

superventure gravatar image

superventure
670 44 54 63

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

Your while loop is using a different goal position than your lookPos. So the gameobject moves towards leader.position until it gets to leader.position+leader.forward*3, which of course won't happen.

more ▼

answered Jun 23 '11 at 04:16 PM

sneftel gravatar image

sneftel
1.7k 7 9 20

I tried to make both of them the same, but it still doesn't work. I also tried to take off '-transform.position' from look pos, and It made the dog veer off in one odd direction forever

Jun 23 '11 at 04:18 PM superventure

Nevertheless, once you fix that, the number of things you are doing wrong will have decreased by 1.

Jun 23 '11 at 04:25 PM sneftel
(comments are locked)
10|3000 characters needed characters left

i was having a similar issue. i did not read all the posts here, but i ended up solving my issue by making my starting "y" value and my ending "y" value the tranform's "y" value.

transform.position = Vector3.MoveTowards(Vector3(transform.position.x, transform.position.y, transform.position.z), Vector3(targetPoint.x, transform.position.y, targetPoint.z), speed);

transform.position = Vector3.MoveTowards(Vector3(transform.position.x, transform.position.y, transform.position.z), Vector3(targetPoint.x, transform.position.y, targetPoint.z), speed);

i separated the first vector3 to show/compare, but it's not needed, same thing could be done like this:

transform.position = Vector3.MoveTowards(transform.position, Vector3(targetPoint.x, transform.position.y, targetPoint.z), speed);

i really wish you could just tell it to "ignore" a value, i've had mixed results with vector2, for some reason, though it seems it should be the same thing... well, i'm still noob level so maybe i'll figure it out someday.

more ▼

answered Aug 02 '11 at 05:26 AM

Cymrix gravatar image

Cymrix
91 2

(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:

x2244
x1330
x915
x108
x23

asked: Jun 23 '11 at 04:13 PM

Seen: 1728 times

Last Updated: Aug 02 '11 at 05:28 AM