- Home /
AddRelativeForce forward and paralel to ground
Hello,
I'm new to unity script, and I'm facing one problem. I like to add force to my character. AddRelativeForce works fine, but when I face up direction the force create a vector up and the character go up. It's not the goal.
If you can help me I'll apreciate (the objective is skydive control to mobile game)
var turnSpeed : float = 10.0; var maxTurnLean : float = 50.0; var maxTilt : float = 50.0;
var sensitivity : float = 10.0;
var forwardForce : float = 800.0; var guiSpeedElement : Transform;
private var normalizedSpeed : float = 0.6; private var euler : Vector3 = Vector3.zero;
var horizontalOrientation : boolean = true;
function Awake () { if (horizontalOrientation) { iPhoneSettings.screenOrientation = iPhoneScreenOrientation.LandscapeLeft; } else { iPhoneSettings.screenOrientation = iPhoneScreenOrientation.Portrait; }
guiSpeedElement.position = new Vector3 (0, normalizedSpeed, 0);
}
function Update () { for (var evt : Touch in Input.touches) { if (evt.phase == TouchPhase.Moved) { // normalizedSpeed = evt.position.y / Screen.height; // guiSpeedElement.position = new Vector3 (0, normalizedSpeed, 0); } } }
function FixedUpdate () { var accelerator : Vector3 = Input.acceleration;
if (horizontalOrientation)
{
var t : float = accelerator.x;
accelerator.x = -accelerator.y;
accelerator.y = t;
//print(t);
}
if (t < 0) //se cabrando anda menos horizontalmente
{
if(t <= -0.6) { //limita a cabrada
t = -0.6;
rigidbody.AddRelativeForce(0, 0, (normalizedSpeed*1.5) * forwardForce);
rigidbody.AddForce(transform.up * (t *-1.5));
print('cabrando: ' + t);
}
} else {
rigidbody.AddRelativeForce(0, 0, (normalizedSpeed*2.5) * forwardForce);
rigidbody.AddForce(transform.up * (t * -1.5));
print('picando: ' + t);
}
//print(normalizedSpeed * forwardForce * t);
// Rotate turn based on acceleration
euler.y += accelerator.x * turnSpeed;
// Since we set absolute lean position, do some extra smoothing on it
euler.z = Mathf.Lerp(euler.z, -accelerator.x * maxTurnLean, 0.2);
// Since we set absolute lean position, do some extra smoothing on it
euler.x = Mathf.Lerp(euler.x, accelerator.y * maxTilt, 0.2);
// Apply rotation and apply some smoothing
var rot : Quaternion = Quaternion.Euler(euler);
transform.rotation = Quaternion.Lerp (transform.rotation, rot, sensitivity);
rigidbody.AddForce(transform.forward * normalizedSpeed * 1000);
}
Answer by aldonaletto · Dec 16, 2011 at 02:26 AM
Use only AddForce instead of AddRelativeForce: get the transform forward direction, zero y to keep only the horizontal direction, calculate the force, correct for cabrando/picando speeds, add the vertical force and apply the force to the rigidbody:
...
// get the relative forward direction:
var hDir = transform.forward;
hDir.y = 0; // keep only the horizontal direction
// calculate the basic horizontal force:
var force = hDir.normalized * forwardForce * normalizedSpeed;
// correct for cabrando/picando
if (t < 0){ //se cabrando anda menos horizontalmente
if (t < -0.6) t = -0.6; // limit t
force *= 1.5;
print('cabrando: ' + t);
} else {
force *= 2.5;
print('picando: ' + t);
}
// add the vertical component
force.y = t * -1.5;
// apply the force
rigidbody.AddForce(force);
...
Your answer
Follow this Question
Related Questions
How to make camera position relative to a specific target. 1 Answer
iPhone Controller Asset 0 Answers
How to set up virtual D-Pad for iOS? 1 Answer