简单2D飞行游戏练习

    ///    时间:2014/7/31pm 6:12 

   ///    2D游戏开发入门笔记(射击游戏)

   ///    完成了第一部分基本内容,如移动,射击,击中效果等

   ///    王小龙

    第一部分基本上是在昨天就已经完成了多部分功能。回忆是最好的一种学习方式。

  

在开发游戏之前,需要一系列的准备工作,当然也不可能把所有的准备都做完,其中就拿本游戏来讲。由于本游戏比较简单,所以在开发之前就已经把相应的图片和素材准备好了。比如背景图片,主角图片,敌人等。值得一提的是,Unity可以分割图片中的某些部分以便当成不一样的部分来处理,这点会在后面讲到。

有了开发的资源就(在这里没有完全按照软件工程中的开发过程)可以动手实践了。首先我们想好有哪些资源,大致给各个资源归类一下。常见的可以有,脚本,预设,声音,动画,贴图,场景,模型等。最好为每类资源建立一个文件夹。在这里推荐一个小技巧,在给文件夹命名的时候,推荐用 _Name(表示是自己的原创资源),Name(表示非原创资源)。这样有利于在以后自己区分。

开发的是一款2D游戏,在场景方面,我一般先把场景分为多个个层次。这里分为了Back,MID,Fore3层。然后在不同层次进行操作。在back中添加背景等,Mid添加主要的移动的背景,Fore添加主要对象。具体的方法就是通过添加空游戏对象(GameObject)。然后在自己根据情况去设置对象的父子关系,添加相应的组件等。

本游戏中,层次如下。需要说明一下,如何把一张图分为几个部分。1、texturetype是spirte。2、sprite mode是mutiple然后点击编辑即可进行分割。

分割完成如下

接下来就是添加主角和敌人还有武器等东东了。其实都差不多。提一下,添加的组件1、碰撞器2、刚体。通常这两者同时使用。在碰撞其中勾上触发,则碰撞的时候不受物理引擎控制,而受脚本的控制。在添加刚体时,应该注意2D游戏中质量或者重力应该为0.如果不想物体旋转则可以固定角度(fixed angle)

 

完成了上面场景的基本设置之后接下来就是写控制脚本了.在这里总结一下。我认为简单游戏开始的时候做好各个基础的场景之后,在去写相应的脚本功能这里由易到难,比较容易。

先来写角色位移的控制脚本。先来大致想一下。场景中涉及到主要 三个对象。飞行器,敌人和子弹。其中子弹和敌人可以使用相同的脚本,只要设置不同的方向就可以了。

具体说来,角色控制,一般会想到通过transform来实现位移。但是那样可能不会和其他物体产生碰撞,所以通过刚体来实现位移。关键语句如下:

movement = new Vector2(
      speed.x * inputX,
      speed.y * inputY);

 

rigidbody2D.velocity = movement;

  

 

   接下来说下比较难一点的就是射击如何处理。涉及到的对象还是三个多作为预设保存,发射子弹,就是让子弹出发位置是飞行器位置。关键代码:

public void Attack(bool isEnemy)
  {
    if (CanAttack)
    {
      shootCooldown = shootingRate;

      // Create a new shot
      var shotTransform = Instantiate(shotPrefab) as Transform;

      // Assign position
      shotTransform.position = transform.position;

      // The is enemy property
      ShotScript shot = shotTransform.gameObject.GetComponent<ShotScript>();
      if (shot != null)
      {
        shot.isEnemyShot = isEnemy;
      }

      // Make the weapon shot always towards it
      MoveScript move = shotTransform.gameObject.GetComponent<MoveScript>();
      if (move != null)
      {
        move.direction = this.transform.right; // towards in 2D space is the right of the sprite
      }
    }
  }

  /// <summary>
  /// Is the weapon ready to create a new projectile?
  /// </summary>
  public bool CanAttack
  {
    get
    {
      return shootCooldown <= 0f;
    }
  }
}

在飞行器的脚本中添加:

oid Update()
  {
    // ...

    // 5 - Shooting
    bool shoot = Input.GetButtonDown("Fire1");
    shoot |= Input.GetButtonDown("Fire2");
    // Careful: For Mac users, ctrl + arrow is a bad idea

    if (shoot)
    {
      WeaponScript weapon = GetComponent<WeaponScript>();
      if (weapon != null)
      {
        // false because the player is not an enemy
        weapon.Attack(false);
      }
    }

    // ...
  }

 

好吧今天到此位置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值