之前已经写过几篇用unity写的小游戏博客,感觉还不错,那么我就继续写下去。 今天写的是像素鸟。
这个像素鸟小游戏玩法也简单,就是点击屏幕,然后小鸟会往上飞一下,不然就会往下掉。然后过程中会有各种水管,我们需要穿越水管,然后得分。
先看场景对象有什么,这里面有bg01也就是背景,然后gameover也就是游戏失败时候会弹出来的背景框。ready就是准备动作。bird是鸟。roads是管道。score是显示分数。
再来看看对象都写了哪些?其实基本上每一个游戏主题都挂上了相应的游戏脚本。其中最重要的肯定是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的话,可以关注公众号:诗一样的代码,留言给我,我教你系统地学。