unity10分钟搭建简易捕鱼游戏

 首先在创建demo之前,要准备好:鱼、大炮、子弹游戏体并添加刚体和碰撞体组件。

在完成脚本的编辑之后,分别把脚本挂载到鱼、大炮、子弹 游戏体体上。就能实现简单的大炮开火射击鱼,鱼生命值为0死亡后发生爆炸特效。

后续对游戏进行完善:添加不同的关卡,不同的大炮,不同的鱼,炫酷的特效,声音组件,得分系统,设计友好的界面,添加游戏管理器。。。

言归正传:
首先对fish脚本进行编写:(fish行走的路径和生成分别用splime waypoint、poolManager插件进行实现)
SetDamage方法中,damage指的是子弹打到鱼时的伤害量,当m_life <= 0时获取爆炸特效的prefab,并设置1s后销毁。

using UnityEngine;
using System.Collections;
public class Fish : MonoBehaviour
{
protected Transform m_transform;
public int m_life = 1;
void Start()
{
m_transform = this.transform;
}
// Update is called once per frame
void Update()
{
}
public void SetDamage(int damage)
{
m_life -= damage;
if (m_life <= 0)

GameObject prefab = Resources.Load(“explosion”);
GameObject explosion = (GameObject)Instantiate(prefab, m_transform.position, m_transform.rotation);
Destroy(explosion, 1.0f);
GameManager.Instance.SetScore(1);
Destroy(this.gameObject);
}
}
}

子弹脚本核心代码如下:Fire Create 为创建子弹实例,方便后面大炮脚本的调用。 

void OnTriggerEnter2D(Collider2D other)中,先获取fish脚本,当fish不为空时,调用SetDamage()方法,伤害值为1,然后销毁子弹游戏体。

using UnityEngine;
using System.Collections;
public class Fire : MonoBehaviour {
protected Transform m_transform;
public float m_moveSpeed = 10.0f;
public static Fire Create(Vector3 pos, Vector3 angle)
{
GameObject prefab = Resources.Load(“Fire”);
GameObject fireSprite = (GameObject)Instantiate(prefab, pos, Quaternion.Euler(angle));
Fire f = fireSprite.AddComponent();
Destroy(fireSprite, 2.0f);
return f;
}
// Use this for initialization
void Start() {
m_transform = this.transform;
}
// Update is called once per frame
void Update() {
m_transform.Translate(new Vector3(0, m_moveSpeed * Time.deltaTime, 0));
}
void OnTriggerEnter2D(Collider2D other)
{
Fish f = other.GetComponent();
if (f == null)
return;
else
f.SetDamage(1);
Destroy(this.gameObject);
}
}

大炮脚本核心代码如下:

在UpdateInput函数实现:计算出大炮到鼠标位置的角度,旋转大炮,并发射子弹。
1、获取鼠标的位置,转为世界坐标。
2、获取大炮的位置
3、按鼠标左键或空格键开火
4、计算鼠标位置和大炮位置之间的角度
5、创建子弹实例,开火。
重点和难点在于:计算鼠标位置和大炮位置之间的角度。

using UnityEngine;
using System.Collections;
public class Cannon : MonoBehaviour {
protected Transform m_transform;
float m_shootTimer = 0;
public AudioClip m_shootClip;
protected AudioSource m_audio;
// Use this for initialization
void Start () {
m_transform = this.transform;
m_audio = m_transform.GetComponent();
}

   // Update is called once per frame
   void Update () {
    m_shootTimer -= Time.deltaTime;
    UpdateInput();

   }
void UpdateInput()
{
    Vector3 ms = Input.mousePosition;
    ms = Camera.main.ScreenToWorldPoint(ms);
    Vector3 mypos = m_transform.position;
    if (Input.GetMouseButton(0) || Input.GetKey(KeyCode.Space))
    {
        Vector2 targetDir = ms - mypos;
        float angle = Vector2.Angle(targetDir, Vector3.up);
        if (ms.x > mypos.x)
            angle = -angle;
        m_transform.eulerAngles = new Vector3(0, 0, angle);
        if (m_shootTimer <= 0)
        {
            m_shootTimer = 1.0f;
            Fire.Create(m_transform.TransformPoint(0, 1, 0), new Vector3(0, 0, angle));
            m_audio.PlayOneShot(m_shootClip);
        }
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弹雨11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值