- Home /
AI movement bug ("teleporting" after certain Platforms)
So , i've downloaded the 2D Platformer that unity provides , with Lerpz . I disabled all the Inputs , and character is being controlled by another script . Then i made 2 scripts . The first one is forcing the character to move through 4 waypoints which ive made , the other forces the character to jump when he finds Crates/Spheres or Gaps . While everything goes as expected , after some platforms the character starts to mix up the waypoints and "teleports" until he reaches the last waypoint . Im not quite sure what causes this problem , ive tried nearly everything.. Any help would be appreciated!Im pasting those 2 scripts i talked about , above.
WaypointScript :
var waypoint : Transform[];
static var speed : int = 5;
private var currentWaypoint : int = 0;
var player : Transform;
private var character : CharacterController;
private var lastPos : Vector3;
function Start ()
{
character = GetComponent(CharacterController);
lastPos = transform.position;
}
function Update ()
{
// calculate displacement since last frame:
var delta = transform.position - lastPos;
lastPos = transform.position; // update last position
delta.y = 0; // consider only the horizontal displacement
// calculate the actual horizontal velocity:
var vel = (delta.magnitude / Time.deltaTime);
if (vel < 0.2)
{
animation.CrossFade("idle"); // lower than 0.2: idle
}
else if (vel < 3.0)
animation.CrossFade("run"); // between 0.2 and 3.0: walk
else
{
animation.CrossFade("run"); // higher than 3.0: run
}
if(currentWaypoint < waypoint.length)
{
var target : Vector3 = waypoint[currentWaypoint].position;
target.y = transform.position.y; // keep waypoint at character's height
var moveDirection : Vector3 = (target - transform.position);
if(moveDirection.magnitude < 1)
{
currentWaypoint++;
}
else
{
character.Move(moveDirection.normalized *speed * Time.deltaTime);
}
}
}
and FindObject:
#pragma strict
function Start () {
}
function Update () {
var allObjects = GameObject.FindGameObjectsWithTag("Sfaires");
for (var child : GameObject in allObjects) {
var dist = (transform.position - child.transform.position).magnitude;
if (dist < 5) {
if (child.name == "pointsphereNPC") {
AIController.AIControls.IsJumping=true;
PlatformerControllerNPC.jump.height=3.0;
return;
}
}
else AIController.AIControls.IsJumping=false;
}
var allObjects3 = GameObject.FindGameObjectsWithTag("Edges");
for (var child3 : GameObject in allObjects3) {
var dist3 = (transform.position - child3.transform.position).magnitude;
if (dist3 < 2) {
if (child3.name == "Platform - End Cap Left") {
AIController.AIControls.IsJumping=true;
PlatformerControllerNPC.jump.height=4.0;
WayPointScript.speed=7;
return;
}
}
else {
AIController.AIControls.IsJumping=false;
}
}
var allObjects2 = GameObject.FindGameObjectsWithTag("Crates");
for (var child2 : GameObject in allObjects2) {
var dist2 = (transform.position - child2.transform.position).magnitude;
if (dist2 < 1) {
if (child2.name == "CrateNPC") {
AIController.AIControls.IsJumping=true;
PlatformerControllerNPC.jump.height=3.0;
return;
}
else AIController.AIControls.IsJumping=false;
}
}
}
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Enemy controller.move script slows down and speeds up. How to get it consistent? 0 Answers
My game controls Doesn't work on certain PC 0 Answers
CharacterController NullReferenceException dispite attached to object 1 Answer
Racing Ai? long read 1 Answer