unity学习之路—飞机大战

unity学习之路—飞机大战

这是我第一次进行博客写作,准备把前段时间写的《飞机大战》游戏的制作过程写出来,一方面为自己知识的梳理,另一方面是为分享,当然,前几次写出来的结果肯定很烂,只会有我自己看的。没关系。
飞机大战大概是在大二下学期做出来的,时间跨度是10天左右,其中是有8天在照着教程做此程序。
———————————————————————————————————————————

  • 游戏可运行程序:点击即可获得,花了半天时间才搞懂git的基础用法,/(ㄒoㄒ)/~~
  • 项目源码:好像放了也没有什么用,因为放上去之后我自己都够呛能组装到一起,unity的话除了代码以外还有其他的,全局变量,以及各个组件的配合等等需要设置。我会在下文中把关键部分写出

- 游戏思路:

1.先做场景。把背景做出来:背景用贴图来做,做出来是这样婶儿的:
unity学习之路—飞机大战_第1张图片
然后让背景以速度V向上循环播放,(不然得做多大得场景才够用啊,)
2.选取主角,同时控制主角移动,发射子弹(子弹的发射与移动)
3.选取敌机,控制敌机飞行,及发射子弹(子弹的发射与移动)。
4.飞行道具,及拾取道具的效果
5.主角、敌机、子弹、道具之间的逻辑交互和特效
6.超级道具的特效及效果制作
7.UI层,计分效果,生命值,拾取超级道具数,分数。的显示与更新。
8.boss的生成、失败的条件
9.游戏的打包。

  • 项目梳理:
  1. 导图片作为游戏背景:转化为精灵(Sprite)即可unity学习之路—飞机大战_第2张图片

2. 旋转的问题:

如果可以,在unity中的物理尽量少用旋转功能,因为如果对物体进行了旋转,那么物体的两个参考系(世界&自身坐标)都会发生相应的变化。
如在旋转-90之后,想向下移动,世界参考系,我只想到了如下代码解决。

 transform.Translate(transform.right * speed * Time.deltaTime,Space.World);

ps:vector3.forword和transform.forword之间区别。

3.方法定时执行:

InvokeRepeating("方法名",触发次数,频率);

该函数一般用于start方法中,不适合用于update里。

public class bulletCreate : MonoBehaviour {
    public GameObject bullet;
    public float rate = 0.3f;
	// Use this for initialization
	void Start () {
        cycle_start();
        // start();
	}
	public void start()
    {
        GameObject.Instantiate(bullet, transform.position, Quaternion.identity);
    }

    public void cycle_start()
    {
        InvokeRepeating("start", 1, rate);
    }
}

与之相似用法的还有MonoBehaviour.CancelInvoke 即取消延迟调用。
4. OnTriggerEnter与OnCollisionEnter区别
当A,B都添加刚体(Rigidbody)时
OnCollisionEnter方法
A和Bx相互碰撞时,无论是谁碰撞的谁,两者都能触发OnCollisionEnter方法,前提是两者都没有勾选isTrigger。
OnTriggerEnter方法
A或者B中有一个勾选isTrigger或者两者都勾选isTrigger后,A和B都可以触发OnTriggerEnter方法,但是不可进入OnCollisionEnter方法。
注意:

OnCollisionEnter方法必须是在两个碰撞物体都不勾选isTrigger的前提下才能进入,反之只要勾选一个isTrigger那么就能进入OnTriggerEnter方法。

OnCollisionEnter和OnTriggerEnter是冲突的不能同时存在的。

当A,B有一个添加了刚体(Rigidbody)时
OnCollisionEnter方法

若A添加了刚体,B没有添加刚体,A去碰撞B,则A会被弹开,B不会运动,此时A、B都会触发OnCollisionEnter方法。
若A添加了刚体,B没有添加刚体,B去碰撞A,不会发生碰撞效果,此时A和B都不会触发OnCollisionEnter方法。
OnTriggerEnter方法

只要A和B中有一个添加了刚体,无论谁碰撞谁,两者都会触发 OnTriggerEnter方法
总结:

OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要。OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发。即刚体是一个判断是否实现碰撞的是与否的标志。
刚体对于系统的开销是很大的,所以在使用刚体时,根据可能发生的碰撞触发事件,适当的减少刚体,是一个减少资源消耗的好办法。 比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。

5.寻找游戏物体的某组件:

f=GameObject.Find("fenshu").GetComponent();

你可能感兴趣的:(unity,项目)