Check out the code below the videos
In part 4 of this Unity3D tutorial we add Enemy AI. The enemy will walk from edge to edge of a platform as long as it's alive. This sort of enemy movement can be seen in many 2D Platformer games like Mario.
Twitter: https://twitter.com/Devination3D
Check out the videos above to hear the explanation and see the code in action
In part 4 of this Unity3D tutorial we add Enemy AI. The enemy will walk from edge to edge of a platform as long as it's alive. This sort of enemy movement can be seen in many 2D Platformer games like Mario.
Twitter: https://twitter.com/Devination3D
Time Breakdown:
0:30 - Updating API from Unity 4.6 to Unity 5
1:45 - Setting up the enemy sprites
2:38 - Locking Layers to avoid accidentally selecting the Canvas
3:40 - Setting up the Enemy walk anim
4:38 - Begin Enemy script
6:56 - Explanation of why we need myWidth for Linecast
9:10 - Setting up isGrounded Linecast check
12:35 - Use isGrounded check to flip the enemy if he gets to an edge
15:52 - Changing move direction to be in local space to the enemy
16:45 - Adding an isBlocked check for hitting walls
17:21 - Using ExtensionMethod .toVector2() to add a Vector2 and a Vector3: https://www.youtube.com/watch?v=D3_r7088dJ4
20:20 - Using myHeight to Linecast from middle left of enemy instead of bottom left corner
22:24 - Demonstration of enemy movement fully working
1:45 - Setting up the enemy sprites
2:38 - Locking Layers to avoid accidentally selecting the Canvas
3:40 - Setting up the Enemy walk anim
4:38 - Begin Enemy script
6:56 - Explanation of why we need myWidth for Linecast
9:10 - Setting up isGrounded Linecast check
12:35 - Use isGrounded check to flip the enemy if he gets to an edge
15:52 - Changing move direction to be in local space to the enemy
16:45 - Adding an isBlocked check for hitting walls
17:21 - Using ExtensionMethod .toVector2() to add a Vector2 and a Vector3: https://www.youtube.com/watch?v=D3_r7088dJ4
20:20 - Using myHeight to Linecast from middle left of enemy instead of bottom left corner
22:24 - Demonstration of enemy movement fully working
Check out the videos above to hear the explanation and see the code in action
/*/ * Script by Devin Curry * www.Devination.com * www.youtube.com/user/curryboy001 * Please like and subscribe if you found my tutorials helpful :D * Twitter: https://twitter.com/Devination3D /*/ using UnityEngine; using System.Collections; public class Enemy : MonoBehaviour { public LayerMask enemyMask; public float speed = 1; Rigidbody2D myBody; Transform myTrans; float myWidth, myHeight; void Start () { myTrans = this.transform; myBody = this.GetComponent<Rigidbody2D>(); SpriteRenderer mySprite = this.GetComponent<SpriteRenderer>(); myWidth = mySprite.bounds.extents.x; myHeight = mySprite.bounds.extents.y; } void FixedUpdate () { //NOTE: This script makes use of the .toVector2() extension method. //Be sure you have the following script in your project to avoid errors //http://www.devination.com/2015/07/unity-extension-method-tutorial.html //Use this position to cast the isGrounded/isBlocked lines from Vector2 lineCastPos = myTrans.position.toVector2() - myTrans.right.toVector2() * myWidth + Vector2.up * myHeight; //Check to see if there's ground in front of us before moving forward //NOTE: Unity 4.6 and below use "- Vector2.up" instead of "+ Vector2.down" Debug.DrawLine(lineCastPos, lineCastPos + Vector2.down); bool isGrounded = Physics2D.Linecast(lineCastPos, lineCastPos + Vector2.down, enemyMask); //Check to see if there's a wall in front of us before moving forward Debug.DrawLine(lineCastPos, lineCastPos - myTrans.right.toVector2() * .05f); bool isBlocked = Physics2D.Linecast(lineCastPos, lineCastPos - myTrans.right.toVector2() * .05f, enemyMask); //If theres no ground, turn around. Or if I hit a wall, turn around if(!isGrounded || isBlocked) { Vector3 currRot = myTrans.eulerAngles; currRot.y += 180; myTrans.eulerAngles = currRot; } //Always move forward Vector2 myVel = myBody.velocity; myVel.x = -myTrans.right.x * speed; myBody.velocity = myVel; } }