- Home /
Push an object along a path?
I've read iTween is good for this but the only one i can find is to move it. I want my character to move say a boulder out of the way by pushing it, but only to a certain point? Like say the character pushes the boulder to the end point which then triggers an event of some kind because it's on top of a switch maybe? Just to give an example?
I'm not asking for like the whole move and push to an event just how to move say a boulder to a certain point that it stops moving?
Answer by Justin Warner · Apr 07, 2011 at 04:01 PM
Um, a way to go about this...
Give the "boulder" a rigid body... And then add a collider that's attatched to it, so that when you move it, it only moves because of the physics, and stops when it hits the collider... Could be easy...
Alt: You can animate this... if player goes to spot A, and pushes F, then boulder rotates and moves ->>> if that makes sense.
Give the "boulder" a rigid body... And then add a collider that's attatched to it
i can't get my head around that bit, i'm probably being a bit dozy but what do you mean?
Well, the rigid body makes it effected by physics... So, if you do that, the ball will roll... So, I suggested add a collider that's a child, and so that while it's rolling, it knows when to stop bc that collider'll stop it.
I've got cubes set up so they move when pushed, but i still dont understand how the collider wil know when to stop it at a certain point?
Alright... So, with this example, you can see, when the "player" pushes the "rock" (Sphere) it moves... you can easily do this in your game... I added a collider, but I don't think it helps much... $$anonymous$$ight actually hurt it haha. http://www.2shared.com/file/6CTk1ta9/TESTING_OTHERS.html
Answer by Gabriel 4 · Apr 07, 2011 at 08:31 PM
You can use a distance check.
You need a few varaibles:
Vector3 targetPoint - The target in world space.
float actionDistance - How far the boulder needs to be from targetPoint before triggering the action. If you want the boulder to have to be in a specific spot set this equal to the boulder's radius
float radius - The radius of the boulder.
Here is some code
public void Move(Vector3 pushForce) {
// First, update our position based on the push applyed by the player
transform.position += playerPushForce * Time.deltaTime;
// Find a vector going from the center of this boulder to the target point
Vector3 difference = targetPoint - transform.position;
// If the distance is less than the actionDistance - radius, then we have a hit
// (the dot product of a vector with its self is the squared magnitude of said vector)
if (Vector3.Dot(difference, difference) < (actionDistance * actionDistance) - (radius * radius)) {
// Hit it!
}
}
I'm a complete begginner to all of this, i get the pplayer push force, but the vector difference i'm baffled by. No idea how to work this. Sorry.
When you subtract v1 from v2 (v2 - v1) you get a new vector. This vector points from v2 to v1. http://www.sparknotes.com/testprep/books/sat2/physics/chapter4section3.rhtml
The difference vector is a vector pointing from the boulders position to the target position. (If you need to visualize it, try Debug.DrawLine())
We can use the length of this vector to deter$$anonymous$$e how far the boulder is from it's target.
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
How to change object colors? 1 Answer
Itween keep speed constant 1 Answer
What is the best way to store a large number of object positions? 1 Answer