Quantcast
Channel: Questions in topic: "enemy"
Viewing all articles
Browse latest Browse all 1488

Making an NPC go up and down in UNITY

$
0
0
So I have this code, it is to make an enemy up and then down using waypoints, it actually works, but for a strange reason after some looping between the waypoints it goes all the way up to the infinity passing the top waypoint (wp0), why is this happening??? I've been toying whith the code but nothing get the appropiate behaviour. The code is for an NPC which has a kinematic rigidbody, it "floats" in the air and is supossed to fly up and down like the flying koopas in the mario bros game... public GameObject[] myWaypoints; float direction = 1f; //1 up, 0 stop. -1 down. int _myWaypointIndex = 0; // used as index for My_Waypoints float _moveTime; float _vx = 0f; bool _moving = true; public float waitAtWaypointTime = 1f; // how long to wait at a waypoint public bool loopWaypoints = true; // should it loop through the waypoints void EnemyMovement() { // if there isn't anything in My_Waypoints if ((myWaypoints.Length != 0) && (_moving)) { // make sure the enemy is facing the waypoint (based on previous movement) Flip(_vx); // determine distance between waypoint and enemy _vx = myWaypoints[_myWaypointIndex].transform.position.y - _transform.position.y; direction = Mathf.Sign(myWaypoints[_myWaypointIndex].transform.position.y); Debug.Log("Direction = " + direction); // if the enemy is close enough to waypoint, make it's new target the next waypoint if (Mathf.Abs(_vx) <= 0.05f) { Debug.Log("changin to the next waypoint"); // At waypoint so stop moving _rigidbody.velocity = new Vector2(0, 0); // increment to next index in array _myWaypointIndex++; Debug.Log("_myWaypointIndex = " + _myWaypointIndex); Debug.Log("Length = " + myWaypoints.Length); direction *= -1; Debug.Log("New Direction = " + direction); // reset waypoint back to 0 for looping if (_myWaypointIndex >= myWaypoints.Length) { Debug.Log("True"); if (loopWaypoints) { _myWaypointIndex = 0; } else { _moving = false; } } // setup wait time at current waypoint _moveTime = Time.time + waitAtWaypointTime; } else { // enemy is moving _animator.SetBool("Moving", true); // Set the enemy's velocity to moveSpeed in the y direction. _rigidbody.velocity = new Vector2(0.0f, _transform.localScale.y * moveSpeed * direction); } } }

Viewing all articles
Browse latest Browse all 1488

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>