官术网_书友最值得收藏!

Creating enemies

Now, it's really cool that we have a player, but it'll get really boring if all we can do is move around and shoot some lasers in the dark. Next, we'll introduce some simple enemies that will move toward the player that we'll be able to shoot later. Perform the following steps:

  1. Exit the game and access our example code's Assets folder; move the enemy.png file into our Sprites folder.
  2. Following that, drag-and-drop it into your scene from the Scene tab to place it in the level.
  3. Right-click on the Scripts folder you created earlier, click on Create, and select the C# Script label. Call this new script MoveTowardsPlayer. Go to MonoDevelop and use the following code:
    using UnityEngine;
    using System.Collections;
    
    public class MoveTowardsPlayer : MonoBehaviour 
    {
      private Transform player;
      public float speed = 2.0f;
    
      // Use this for initialization
      void Start () 
      {
        player = GameObject.Find("playerShip").transform;
      }
      
      // Update is called once per frame
      void Update () 
      {
        Vector3 delta = player.position - transform.position;
        delta.Normalize();
        float moveSpeed = speed * Time.deltaTime;
        transform.position = transform.position + (delta * moveSpeed);
      }
    }

    In the beginning of the game, I find the player ship and get his transform component. Then, in every frame of the project, we move the enemy from where it currently is to the direction where the player is at.

    Note

    If you ever want to have objects run away from the player, use a negative value for the speed variable.

  4. Drag-and-drop this newly added behavior onto our enemy object.
  5. Next, add a circle collider to our enemy by going to Component | Physics 2D | Circle Collider 2D. Change the Radius property to .455, and run the game. Have a look at the following screenshot:

Now, you'll see that the enemy will always move toward you! But if we shoot it, nothing happens. Let's fix that as follows.

  1. Right-click on the Scripts folder you created earlier, click on Create, and select the C# Script label. Call this new script EnemyBehaviour. Go to MonoDevelop, and use the following code:
    using UnityEngine; // MonoBehaviour
    
    public class EnemyBehaviour : MonoBehaviour 
    {
    
      // How many times should I be hit before I die
      public int health = 2;
    
      void OnCollisionEnter2D(Collision2D theCollision)
      {
        // Uncomment this line to check for collision
        //Debug.Log("Hit"+ theCollision.gameObject.name);
    
        // this line looks for "laser" in the names of 
        // anything collided.
        if(theCollision.gameObject.name.Contains("laser"))
        {
          LaserBehaviour laser = theCollision.gameObject.GetComponent("LaserBehaviour") as LaserBehaviour;
          health -= laser.damage;
          Destroy (theCollision.gameObject);
        }
        
        if (health <= 0) 
        {
          Destroy (this.gameObject);
        }
      }
    }

    Now, you will notice that we have commented a line of code calling the function Debug.Log. This function will print something onto your console, which may help you when debugging your own code in the future.

  2. Save the file, and then go back into Unity. Attach the EnemyBehaviour behavior to your enemy object. For collision events to register we need to add a Rigidbody 2D component to our enemy by going to Component | Physics 2D | Rigidbody 2D. Change the Gravity Scale to 0 so it will not fall. Have a look at the following screenshot:

    Note

    OnCollisionEnter2D is a function that will trigger when two objects with 2D colliders collide. It is important to note collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached (which we just did).

    For more info on OnCollisionEnter2D check out http://docs.unity3d.com/ScriptReference/Collider2D.OnCollisionEnter2D.html.

Now, whenever we hit the enemy with our bullets twice, it will die. Nice!

主站蜘蛛池模板: 浦北县| 曲阳县| 新竹县| 凤城市| 莒南县| 平江县| 大新县| 鱼台县| 绵竹市| 应城市| 鞍山市| 绥中县| 衡山县| 博爱县| 乌拉特后旗| 长泰县| 通州区| 平果县| 桦甸市| 古蔺县| 缙云县| 怀柔区| 濮阳县| 清原| 合山市| 平南县| 萝北县| 铜川市| 休宁县| 巴南区| 嘉义市| 邢台市| 苍山县| 荣昌县| 喀什市| 五原县| 丹寨县| 大兴区| 蓝山县| 砚山县| 育儿|