Unity 官方案例 打砖块
来源:互联网 发布:mysql两表关联update 编辑:程序博客网 时间:2024/05/18 03:56
这次的案例是通过科学上网在Youtube上看的,由于没有字幕,中英文都没有,再加上我英语也不好,所以有很多地方都是我自己的理解来写的,如有不对的地方还请见谅。
废话不多说!首先新建一个3D工程。我们先来搭建场景。用cube做出如下场景,供小球弹。
左边一根取名为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)); } }}
现在小球就可以弹起来了
好吧,有点晚了,剩下的东西在下篇博客中继续讲解。工程也就不先发了,下次讲完一起发。
- Unity 官方案例 打砖块
- Unity 官方案例 打砖块(二)
- Unity学习之打砖块小游戏
- Unity 弹球打砖块游戏(简易)
- 打砖块
- 打砖块
- 打砖块
- Unity 2D Arkanoid Tutorial(打砖块教程)
- Unity入门·(二)打砖块(I)
- Unity入门·(二)打砖块(II)
- 初始Unity 3D——小Demo打砖块
- 打砖块游戏源码
- HNOI2004 打砖块
- Qt打砖块游戏
- android 打砖块游戏
- Linux C 打砖块
- 【HNOI2004】打砖块
- wiki 1257 打砖块
- 2016"百度之星" - 资格赛(Astar Round1)Problem C(字典树)
- Win10应用商店、应用打不开或闪退的解决方法
- C++11尝鲜:右值引用和转发型引用
- Range对象介绍
- android开发笔记之 AlarmManager(闹钟服务)
- Unity 官方案例 打砖块
- 关于python字符串的处理
- 数据结构之魔方程序
- 我在Adapter中使用holder时踩到的坑
- 乱码问题
- 手机服务 取得电池电量信息
- Android-Intent详解
- 【set】
- 关于找工作