unity像素鸟实现

888 阅读2分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战

之前已经写过几篇用unity写的小游戏博客,感觉还不错,那么我就继续写下去。 今天写的是像素鸟。

image.png

这个像素鸟小游戏玩法也简单,就是点击屏幕,然后小鸟会往上飞一下,不然就会往下掉。然后过程中会有各种水管,我们需要穿越水管,然后得分。

image.png

先看场景对象有什么,这里面有bg01也就是背景,然后gameover也就是游戏失败时候会弹出来的背景框。ready就是准备动作。bird是鸟。roads是管道。score是显示分数。

image.png

再来看看对象都写了哪些?其实基本上每一个游戏主题都挂上了相应的游戏脚本。其中最重要的肯定是bird脚本,这是控制鸟主角的动作的。


	// Use this for initialization
	void Start () {
		body = gameObject.GetComponent<Rigidbody2D>();
		initPos = gameObject.transform.position;
	}
	
	// Update is called once per frame
	void Update () {
		if(Input.GetButtonDown("Fire1")){
			body.AddForce(force);
		}
	}

	public void reset() {
		body.isKinematic = true;
		gameObject.transform.position = initPos;
		gameObject.transform.eulerAngles = Vector3.zero;
		GetComponent<Animator>().enabled = true;
	}

鸟的动作主要是有三个函数,一开始在start函数里面得到鸟的刚体和位置。在游戏逻辑update中当按下了“Fire1”键,也就是电脑的鼠标左键时候,鸟作为刚体就会往上增加一个力,这个力是为了让鸟有一个向上的跳动。注意,这里必须要让鸟是刚体,他才会受力的。

最后是reset()函数,也就是重新配置鸟的位置,欧拉角,动画等属性而已。


	public void gen() {
		zhuzi[0].SetActive(true);
		zhuzi[1].SetActive(true);
		Vector3 p = zhuzi[0].transform.localPosition;
		float vv = Random.value;
		p.y = Mathf.Lerp(down, upper, vv);
		zhuzi[0].transform.localPosition = p;

		p = zhuzi[1].transform.localPosition;
		 vv = Random.value;
		p.y = Mathf.Lerp(down, upper, vv);
		zhuzi[1].transform.localPosition = p;
	}

上面这段代码是写柱子的随机生成,其实就是随机生成柱子的位置。这里面只管了生成。

	void Update () {
	 	Vector3 pos = trans.position;
		pos.x -= speed * Time.deltaTime;
		trans.position = pos;
		if(pos.x <= -1.6f - 3.35f*idx) {
			Vector3 pp = roads[idx%2].transform.position;
			pp.x += 3.35f;
			idx++;
			roads[idx%2].transform.position = pp;
			if(isBegin){
				roads[idx%2].GetComponent<roadGen>().gen();
			}
		}
	}

然后这一段代码写的是柱子的移动。其实看起来是鸟在动,其实鸟一直在中心的位置没有变化,而是柱子一直在向左移动。

这个是一个比较基础简单的游戏实例,有兴趣学unity的话,可以关注公众号:诗一样的代码,留言给我,我教你系统地学。