- Home /
Question by
Bonifatius GK · Dec 10, 2012 at 05:53 AM ·
c#errorphysicssteeringsimplemove
SimpleMove() error, jump by itself
i have a script to make a character move by it self to a certain position. i use simpleMove() to make this character move ignoring the y transition, but when the character reach the target position, it jumps for nothing, when i do a debugging, it shown that the y axis change by it self, anyone knows why..??. when i just change the character posisition manually it works flawlessly. but the physics won't work...
class AStarAI : MonoBehaviour
{
CharacterController cc;
public bool triggered = false;
public Transform[] patrolList;
public float waypointRadius = 1.5f;
public bool loop = false;
public bool faceHeading = true;
public float maxSpeed = 10f;
public float maxTurningSpeed = 360f;
public float acceleration = 3f;
public float proximityRadius = 3f;
float speed = 0f;
private WayPointsCollector WPcol;
private Transform[] CurrentWaypoints;
private Vector3 targetHeading;
private Vector3 direction;
private int targetwaypoint;
void Start(){
WPcol = (WayPointsCollector)GameObject.FindWithTag("walkable").GetComponent("WayPointsCollector");
CurrentWaypoints = new Transform[patrolList.Length];
patrolList.CopyTo(CurrentWaypoints,0);
if (CurrentWaypoints.Length <= 0)
{
//Debug.Log("No waypoints on " + name);
enabled = false;
}
targetwaypoint = 0;
cc = GetComponent<CharacterController>();
}
void FixedUpdate()
{
targetHeading = (CurrentWaypoints[targetwaypoint].position - transform.position);
}
void Update() {
if (!triggered) {
}
else {
}
targetHeading.y = 0f;
bool turned = false;
// Do we need to adjust facing?
Quaternion idealFacing = Quaternion.LookRotation(targetHeading);
// This is how far we would like to turn
float angle = Quaternion.Angle(transform.rotation, idealFacing);
// This is most we are allowed to turn this frame
float maxTurn = maxTurningSpeed * Time.deltaTime;
if (maxTurn >= angle)
{
// Excellent. We can just face the target
transform.Rotate(0, angle, 0);
}
else
{
// We'll have to take this more gradually then; use slerp to smoothly face the target.
transform.Rotate(0, maxTurn, 0);
turned = true;
}
// Now that we've adjusted facing, let's move our wanderer around
if (turned)
{
// If we needed to turn then slow down while we correct course, bringing ourselves to a halt if necessary.
speed = Mathf.Max(0f, speed - acceleration * Time.deltaTime);
}
else
{
// Since we didn't turn we will speed up if the target is far away and slow down otherwise
float distance = targetHeading.magnitude;
if (distance > proximityRadius)
{
speed = Mathf.Min(maxSpeed, speed + acceleration * Time.deltaTime);
}
else
{
float frac = distance / proximityRadius;
float idealSpeed = maxSpeed * frac;
speed = Mathf.Max(idealSpeed, speed - acceleration * Time.deltaTime);
}
// Close enough? Then go somewhere else.
if (Vector3.Distance(transform.position, CurrentWaypoints[targetwaypoint].position) <= waypointRadius)
{
targetwaypoint++;
if (targetwaypoint >= CurrentWaypoints.Length)
{
targetwaypoint = 0;
if (!loop)
enabled = false;
}
}
}
// Move.
cc.SimpleMove(transform.forward * speed);
//transform.position += transform.forward * speed * Time.deltaTime;
}
}
thx.
Comment
Your answer
Follow this Question
Related Questions
Distribute terrain in zones 3 Answers
C# script not working 1 Answer
Multiple Cars not working 1 Answer
How do I solve this error? 2 Answers
What is the error? 2 Answers