之前已经写过几篇用unity写的小游戏博客,感觉还不错,那么我就继续写下去。 今天写的打砖块初级版的小游戏。
其实这个游戏就是模仿传统的打砖块游戏。不过游戏的主题设计是在海底。一只乌龟作为挡板接住小球,并且通过反弹小球而打到浮在上游的其他海底生物。游戏界面如下图所示。
为了丰富游戏内容,让游戏元素更加多。此小游戏采用了关卡制。打完一关会到下一关。并且每一关卡的难度不一样,怪物不一样,怪物数量不一样,并且怪物的血量不一样。
虽然创造的是一个小游戏,但是它也是五脏六腑俱全的。下面我们一起来看看它的设计过程。
1首先介绍的是场景中的物体。
场景中的物体有上面几部分过程,分别是摄像机,日关灯,背景图,小球,乌龟,gameover图标。摄像头就像是眼睛一样,是必须的,没有了摄像头也就看不到场景发生了什么。还有日关灯是平行光,像太阳照射一样,如果场景中没有了的话,就会一片黯淡无光。我做的是2d游戏,所以这里只需要导入背景图片,然后设置成为精灵类型,在场景中选择中间的位置,把它放大就行。还有在game窗口我用了自己写的比例,让它看起来像手机游戏的窗口显示。
void Start()
{
Random.InitState((int)System.DateTime.Now.Ticks);
x = Random.Range(3.0f, 9.0f);
y = Mathf.Sqrt(vec * vec - x * x);
rigid = gameObject.GetComponent<Rigidbody2D>();
rigid.velocity = new Vector2(x, y);
}
// Update is called once per frame
void Update()
{
if (this.transform.localPosition.x > 2.8f && x > 0 || this.transform.localPosition.x < -2.8f && x < 0)
{
x = -x;
rigid.velocity = new Vector2(x, y);
}
if (this.transform.localPosition.y < -3.31f &&y<0 )
{
Time.timeScale = 0;
gameover.transform.localPosition = new Vector2(-0.1f, 2.0f);
}
if (this.transform.localPosition.y > 6.5f &&y>0)
{
y = -y;
rigid.velocity = new Vector2(x, y);
}
}
上面这一段是小球的关键代码。这里面写的主要是小球碰到了墙体,然后反弹,这需要改变速度的方向。
void Update()
{
//获取鼠标在相机中(世界中)的位置,转换为屏幕坐标;
screenPosition = Camera.main.WorldToScreenPoint(transform.position);
//获取鼠标在场景中坐标
mousePositionOnScreen = Input.mousePosition;
//让场景中的Z=鼠标坐标的Z
mousePositionOnScreen.z = screenPosition.z;
//将相机中的坐标转化为世界坐标
mousePositionInWorld = Camera.main.ScreenToWorldPoint(mousePositionOnScreen);
//物体跟随鼠标移动
//transform.position = mousePositionInWorld;
//物体跟随鼠标X轴移动
transform.position = new Vector3(mousePositionInWorld.x, transform.position.y, transform.position.z);
}
上面这一段就是乌龟挡板的关键代码。主要是让乌龟随着随表移动。
void OnTriggerEnter2D(Collider2D collider)
{
if (collider.gameObject.tag == "spark" && Time.frameCount - timelast > 15)
{
timelast =Time.frameCount;
collider.gameObject.GetComponent<spark>().lift -= 1;
y = -y;
rigid.velocity = new Vector2(x, y);
}
else if (y <0)
{
y = -y;
rigid.velocity = new Vector2(x, y);
}
}
我们看看这个小球中的碰撞检测函数。碰撞的对象的tag是spark,这里的spark是指怪物。让碰撞到的话就会血量减少。这个血量是怪物身上的全局属性。当怪物血量为0的话,怪物就会销毁。当场景中没有了怪物,那就算一个关卡的结束。
这个小游戏也不算太难。当时如果是新手学unity的话,可以了解一下。之后对于物理系统和碰撞检测都有一定的认识。如果你有兴趣学unity的话,也可以关注公众号:诗一样的代码,找我一起学习。