unity编写一个简单的小游戏

简易fly bird的制作

关于flybird

这个游戏想必大家都玩过,今天我们要使用unity来写一个差不多的fly bird,需要unity和vs的配合,这个游戏规则就是控制一个bird通过一个个柱体之间的缝隙。在这里插入图片描述

场景的搭建和素材的导入

打开unity,选择文件路径,因为这个游戏是2D的,选择2D后我们create。素材对于我们学生党很难搞,我们百度asset store就找到unity为我们提供素材的地方,在搜索栏搜索bird就好了,在筛选的位置选择价格免费,很方便的,在里面随便选一个bird就好了,import到你的unity项目里。觉得这个素材质量不太好的,自己可以使用ps在网图上面扣下来自己想要的bird。在这里插入图片描述

使用素材搭建game和scene

在你的素材包选择你喜欢的bird拖入scene中,我们要完成一个fly的bird,我们需要借用unity中的刚体,就是给bird在右侧的inspector加上脚本Rigidbody 2D。
这样这个bird就具有我们想让他有的自然下落等一系列物理条件
运行一下可以看到bird的自然下落,就ok了
我们的bird在游戏里不可能是一直下落的,这样需要我们给这个场景加上一个边界。我是直接使用ps弄了一个白色柱体(你还可以使用unity自带的素材,也可以按上面导入),游戏边界我们让他有什么条件呢,让他是个类似实体平面,可以让bird停留在上面这时候使用collider2D这个属性(当然我们的bird上也必须有这个collider,里面有个polygon collider2D这个很适合这种不规则形状的物体),先对一个柱体完成上面的操作 剩下的复制(ctrl+d就可以直接复制)就好了 (横竖不一样,调节z的角度为90就OK了),将边框完成。运行一下发现bird会落在白色边界上,这样场景就搭建好了。

制作柱体

我们还是使用上面的白色柱体(不喜欢的可以自己随便导入柱体,没有影响的),对柱体加上collider(我们游戏规则,bird必须在两个柱体之间的缝隙通过,两个柱体是不可以穿过),ok后复制一个,调整二者的位置,形成我们想得到的样子,然后我们右键建一个gameobject并命名为column,将上面建好的两个柱体拖到这个column里面,在column上(注意不要点在那两个柱体上)增加一个box collider2D并使用edit collider,然后对这个的is trigger进行勾选(这个的意思让bird可以在这个之间的collider通过,方便我们后面编写script进行计分),让column成为这样并拖入assets中即可成为我们的素材(毕竟以后我们要不断的生成column):
在这里插入图片描述

bird的script

现在开始我们快乐的edit script环节,在assets右键生成一个文件夹,命名为code,在code里面create一个c# script命名为birdcontrol(这几步最好一次完成,否则到时候加脚本到bird上会出现找不到脚本的bug,真的莫名其妙),打开这个birdcontrol,我们会看到自动生成的代码里面有两个函数(可以使用的函数有4个,每一个的具体含义自己百度,我就不赘述了)
将下面的代码拖到bird的inspector中,对speed赋值,通过空格键,操作bird的移动。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class birdcontrol : MonoBehaviour
{

    Rigidbody2D bird;

    public float speed;                                         //使用speed方便在项目里面选择一个合适的倍数

    // Use this for initialization
    void Start()                                                //游戏一开始就会调用的函数
    {
        bird = GetComponent<Rigidbody2D>();                     //将游戏里面的bird引入
    }
    // Update is called once per frame
    void Update()                                               //游戏每一帧都会调用的函数
    {
        if (Input.GetKeyDown("space"))
        {
            bird.AddForce(new Vector2(0, 2 * speed));           //vector2相当于一个有xy的矢量
        }
    }
}

column的sprite

我们完成了bird在竖直方向的移动控制,接下来要完成在水平方向的移动,总所周知运动是相对的,我们可以通过让column的移动,来完成水平方向的移动,让他以一个均匀的速度自动向右移动translation。
还有当bird通过column时会加一分,这时候使用ontriggerexit2D这个函数来判断。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class columncontrol : MonoBehaviour {
    public float speed;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        this.transform.Translate(new Vector2(-speed,0));
	}

    private void OnTriggerExit2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "player")
        {
            Debug.Log("1");
        }
    }
}

column的生成

游戏中不可能只有一个柱体,而且也需要他的上下变动,这时候我们需要在游戏的最右端的一个位置不断地生成位置随机的column,这时候我们需要给他一个生成点spawnpoint,右键一个empty,命名为spawnpoint,然后我们为他添加脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class spawn : MonoBehaviour {

    public GameObject column;
    public float colddown = 2f;
    public float NextSpawn;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        if (Time.time > NextSpawn)
        {
            NextSpawn = Time.time + colddown;

            Vector3 spawnP = transform.position;
            spawnP.y += Random.Range(3.0f, -3.0f);
            Instantiate(column, spawnP,transform.rotation);
        }
	}
}

最后别忘记将column应用上去
在这里插入图片描述

游戏判定

我们都知道当这个bird碰到墙壁,柱体上,游戏都是失败,这时候就会停止游戏,所以我们给他一个hitted和GM的脚本进行判断(hitted是要添加到ground和column上)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//GM.cs
public class GM : MonoBehaviour {

    public static int score = 0;

    public static bool Active = true;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//hitted.cs
public class Hitted : MonoBehaviour {

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            GM.Active = false;
        }
    }
}

一旦bird与其碰上就会立刻停止column的运动和生成,所以我们在上面的也要相应的修改

if (GM.Active)		//columncontrol.cs
        {
            this.transform.Translate(new Vector2(-speed, 0));
        }
if (Time.time > NextSpawn&&GM.Active)	//spawn.cs
        {
            NextSpawn = Time.time + colddown;

            Vector3 spawnP = transform.position;
            spawnP.y += Random.Range(3.0f, -3.0f);
            Instantiate(column, spawnP,transform.rotation);
        }

游戏结束画面

右键在UI里面选择text,并把其命名为score(用于显示分数)再canvas里面再新建一个text,命名为gameover(显示Game Over!),并在上面的active位置把勾取消(不显示文本,当游戏结束时才会出现),下面是UI.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UI : MonoBehaviour {
    public GameObject gameover;
    public Text score;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {

        score.text = "Score" + GM.score;

        if (!GM.Active)
        {
            gameover.SetActive(true);		//这里会让gameover显示	
        }
	}
}

UI.cs要添加到canvas上并在相应的位置把score和gameover应用上去。在这里插入图片描述

结语

这个flybird较为简单,但是动手实践的时候会让你受益颇多,也是方便你入门的一个程序,我是用的unity和vs的组合比较方便,至于怎么配置的环境和他们之间的关系,百度一下就好了。

  • 47
    点赞
  • 308
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值