Unity 官方案例 打砖块

来源:互联网 发布:mysql两表关联update 编辑:程序博客网 时间:2024/05/18 03:56

这次的案例是通过科学上网在Youtube上看的,由于没有字幕,中英文都没有,再加上我英语也不好,所以有很多地方都是我自己的理解来写的,如有不对的地方还请见谅。
废话不多说!首先新建一个3D工程。我们先来搭建场景。用cube做出如下场景,供小球弹。
这里写图片描述

左边一根取名为Wall1
Wall1

右边叫做Wall2
这里写图片描述

顶叫做Roof
这里写图片描述

再用cube做一个底,就像是地板一样的,
这里写图片描述

我们取名叫做Water,因为到时候要做一个模拟小球消失的效果,就像掉在水中。。这里要注意一点,不能用Plane,因为要让小球掉下去,但又需要有一些碰撞信息知道小球确实掉下去了,所以这里需要用到触发器,而Plane不能勾选触发器。所以我们给Water勾选 istrigger
这里写图片描述

它的位置信息是
这里写图片描述

接下来我们创建主角。先用cube创建一个底座Paddle,底座的位置要略高于Water,不然他会一直与Water碰撞。
这里写图片描述

这里写图片描述

给他添加刚体组件。由于我们控制它移动,并不需要使用力来控制,所以勾选 is kinematic,(IsKinematic属性,如果要移动这类对象,就只能修改它的Transform,而不是用力。)当然也不需要它受重力影响,所以取消 use gravity
这里写图片描述

在创建一个真正的主角小球 Ball,添加刚体组件
这里写图片描述

这里写图片描述
小球也一样,勾选 is kinematic,取消 use gravity

然后把 Ball 作为 Paddle 的子物体,再把合成的物体做成Prefab就行。
然后再用cube创建供小球打击的砖块Brick。
这里写图片描述

这里写图片描述
这里的位置大家也可以自己设置,合适就行,但要注意稍微让cube离柱子的距离远一点,不然小球没办法通过。最后通过复制粘贴(或者Ctrl+D)做成如下
这里写图片描述

这里的位置大家也是可以随便拖动的,只不过要注意让两个cube外观之间的距离小于1,不然的话可能出现小球卡在中间的状况,我的距离大概是0.5。然后再新建一个空物体,重置位置信息,名字取做Bricks,然后让他作为所有Brick的父物体,然后把合成后的物体做成Prefab。就行了。
接下来,我们来敲代码,让Paddle移动起来。给他添加一个Paddle的脚本:

using UnityEngine;using System.Collections;public class Paddle : MonoBehaviour {    public float paddleSpeed = 1f;  //移动速度    private Vector3 playerPos = new Vector3(0, -9.4f, 0);  //初始位置    // Update is called once per frame    void Update () {        //按下水平按键时,得到当前位置与水平方向的位移        float xPos = transform.position.x + Input.GetAxis("Horizontal") * paddleSpeed;        //重新设置位置为水平方向改变后的值        //小于-8时值是-8,大于8时,值是8,        //因为是水平移动,y,z轴不变        playerPos = new Vector3(Mathf.Clamp(xPos, -8f, 8f), -9.4f, 0);        //更新位置        transform.position = playerPos;    }}

调整一下摄像机的位置,让他能够更好的观看到整个游戏。
这里写图片描述
现在运行游戏的话,应该是底座和小球一起运动才对。但是,Unity5 自带的天空盒是不是和这个游戏有点不搭,点击 Window –> Lighting,然后把Skybox修改为None。然后修改相机的属性
这里写图片描述

现在运行游戏,是不是感觉好多了。
这里写图片描述

为了让小球能够弹起来,现在需要给他添加一个特殊的材质,在Assert目录下(或其他目录下)右键,Create –> Physic Material ,名字取做 Bounciness,设置为
这里写图片描述
这就表示,添加了这个材质的物体弹时不受阻力,并且弹力为1,即刚开始力是多少,就反弹多少。
然后选中除了摄像机,灯光,Bricks,Water 外的所有物体,添加上这个材质。
这里写图片描述

这里写图片描述

给 Ball 添加一个名字叫做 Ball的脚本:

using UnityEngine;using System.Collections;public class Ball : MonoBehaviour {    public float ballInitialVelocity = 600f;   //小球发射时的速度    private Rigidbody rb;    private bool ballInPlay;  //小球是否在运动    // Use this for initialization    void Awake () {        rb = GetComponent<Rigidbody>();    }    // Update is called once per frame    void Update () {        //如果按下了左键  并且小球不在运行        if(Input.GetButtonDown("Fire1") && ballInPlay == false)        {            //设置不要父物体            transform.parent = null;            ballInPlay = true;            //设置非动力学            rb.isKinematic = false;            //添加一个力让他运动            rb.AddForce(new Vector3(ballInitialVelocity, ballInitialVelocity, 0));        }    }}

现在小球就可以弹起来了
这里写图片描述

好吧,有点晚了,剩下的东西在下篇博客中继续讲解。工程也就不先发了,下次讲完一起发。

0 1
原创粉丝点击