一、射弹游戏
1. unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视
化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。利用交互的图型化开发环境为首要方式的软件其编译器运行在Windows和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、Windows phone 8和Android
平台。也可以利用Unity web player插件发布网页游戏,支持Mac 和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。
2. Unity3D到底是什么?
Unity3D是一个让你轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引
擎。
3. Unity3D特点:
⑴ 综合编译
通过Unity简单的用户界面,你可以完成任何工作。这些为你节省了大量的时间。 ⑵ 图形动力
Unity对DirectX和OpenGL拥有高度优化的图形渲染管道。 ⑶ 资源导入
Unity支持所有主要文件格式,并能和大部分相关应用程序协同工作。 ⑷ 一键部署
Unity可以让你的作品在多平台呈现 ⑸ Wii的发布
Unity让业界最流行的游戏开发软件更容易开发 ⑹ 着色器
Unity的着色器系统整合了易用性、灵活性和高性能
4. 脚本Unity支持3中脚本语言:JavaScript,C#,Boo 5. 创建一个工程Unity3d
⑴ 在层次面板中点击create创建一个Cube(立方体)--F2键改名。 ⑵ 给物体添加一个刚体组件(rigibody)可以使得受到重力的实现。
选择砖块,在属性面板里点击add component---选择物理里的Rigibody ⑶ 为场景添加灯光---Point light(点光源)。 ⑷ 为了在运行时场景与看到的画面一致,做对其操作---点击主摄像机选择GameObject----Align With View。 ⑸ 把图片引入到unity3d中,先创建一个文件-?直接拖拽。
⑹ 如何将导入的图片放在组件上,选中材质球?在main color中select图片 ⑺ 创建文件夹来存储内容,更好的分类。
⑻ 在资源文件夹中创建一个脚本文件夹。 ⑼ 预置:预置是一种资源类型——存储在项目视图中的一种可重复使用的游戏对象。预置可以多
次放入到多个场景中。当你添加一个预置到场景中,就创建了它的一个实例。所有的预置实例链接到原始预置,基本上是它的克隆。不管你的项目存在多少实例,当你对预置进行任何更改,你将看到这些更改将应用于所有实例。
6. 创建一个墙:
将组件直接拖拽到prefabs文件中,组件就变成了预置物体。Ctrl+D是复制物体。
把复制的物体变成一个空物体的子物体-?①创建空物体作为砖块的复制物体。②将
复制的物体放在空物体里
7. 创建一个射弹?第一个脚本
⑴ 创建一个球的组件并填充颜色预置。①预置后删除。②编写脚本:选中脚本文件夹,并创建Javascript脚本。创建脚本实现主摄像机漫游。
⑵ Sheji.js—>Start()函数:当场景一加载的时候运行一次函数(场景显示),在Start里写 一些命令。
?Update()函数:每调用一帧就调用一次Update函数,可以认为Update函数是实时进行的
8. Unity的输入管理器
在编辑菜单下Project Setting?input
Horizontal?水平方向默认值,a左返回-1,d右返回1。 Vertical?垂直轴,w向前走路,s向后走。 Fire1?开火键。默认ctrl 9. 编写脚本来控制主摄像机的移动
1) 输入管理器是Unity3d的类
2) Input.GetAxis(“Horizontal”)?检查按下a还是d。
3) Time.deltaTime:两帧之间的时间间隔。
4) var speed : int = 5; 移动主摄像机的速度。变量:是在计算机中用来申请的空间。Var—>在java中申请变量,var x = Input.GetAxis(“Horizontal”) * Time.deltaTime * speed;
5) transform.Translate(x,0,z);?移动物体。Print(x);在控制器上输入。 6) 脚本只有依附在物体上才会成功执行。 10. 点击左键发射射弹----实例化命令
⑴ Instantiate(要生成的物体,生成的位置,生成的旋转角度); ⑵ 检测鼠标左键(左Ctrl):
If(Input.GetButtonDown(“Fire1”)){//判断是否按了左键
Var n:Transform = Instantiate
(newobject,transform.position,transform.rotation); //var:java里面申请变量
}
⑶ 给物体加力:
n.rigibody.AddForce(fwd*28000); //已经给生成的物体添加刚体这个组件,fwd是个变量。 ⑷ 转换方向:
Var fwd:Vector3 = transform.TransformDirection(Vector3.forward); //Vector3就是
“xyz”。Forward是“0,0,1”向前的意思-?沿z轴方向?摄像机实际的照射的方向。
⑸ 销毁物体
Destroy(gameObject,3.0);//消除射弹。过3秒钟之后消除。‘ 11. 把射击的射弹添加到主摄像机 为变量赋予方法,直接拖拽。
12. 实现主摄像机的场景里的左右旋转
检测键盘按键命令:Input.GetKey(KeyCode.Q){ //按下键盘上的Q键就返回真, Transform.Rotate(0,-25*Time.deltaTime,0,Space.Self); //旋转的xyz 13. 解决“走到地面”问题
问题的原因:是因为主摄像机与地面的夹角。 解决:利用旋转命令。
14. Java脚本里区分大小写很明显,Input.GetKey(KeyCode.Q)--?Q必须大写。 15. 镜头的升降:
if(Input.GetKey(KeyCode.H)){ transform.Translate(0,5*Time.deltaTime,0); }
if(Input.GetKey(KeyCode.N)){ transform.Translate(0,-5*Time.deltaTime,0); }
16. 实现功能----GUIText在场景中显示文字。
⑴ 在Hierarchy层次面板里,create一个GUIText(物体类型,图形用户接口文本)的
物体。
⑵ GUIText的属性:Text?显示的内容
⑶ 通过设置Position来控制GUIText的内容在场景里哪个位置来显示。 ⑷ GUIText的物体注册点在左上角。Z轴是用来显示文字的深度。
17. 实现计算射弹数
⑴ 创建一个变量来存放射弹数?var sdcount:int = 0;
⑵ 在点击的的判断语句中增
?gameObject.Find(“wenzi”).GetComponent(GUIText).text=”射弹数:”+sdcount
加
//在层次面板中寻找”wenzi”物体,找到组件(GetComponent(GUIText))并访问属性
18. 实现计数射弹数的消灭数(物体被打在地面下代表消灭),消灭数超过20个成功通关
⑴ 创建一个变量来存放消灭数?var xmcount:int = 0;
⑵ 创建一个新的脚本?jiancha ⑶ Transform?场景,gameObject?脚本加载在哪个物体。
⑷ //transform组件里有位置、旋转等属性。判断游戏对象是否打倒在地面上(Y轴小
于0): if(gameObject.transform.position.y<0) ⑸ 找到sheji脚本的
消
灭
数
(
xmcount
)
:
Transform.Find(“Camera”).GetComponent(“sheji”).xmcount++; //寻找物体时加“”,组件不用加“” ⑹ 消灭数成功之后,不在调用sheji脚本
gameObject.Find(“Camera”).GetComponent(sheji).enabled=false;
19. unity3d里transform和Translate什么分别代表什么意思?
transform是Gameobject的位置属性,translate是一个动作属性。获取某个object的位置信息时就是transform,若是对其做动作,那就translate
20. 添加按钮
⑴ function OnGUI() //负责界面物体,和update一样在游戏执行的每一帧都被调用 ⑵ GUI.Button(Rect(180,100,60,30),”退出”);//在场景里画一个按钮,屏幕左上角是0,0。
GUI.Button(Rect(距离屏幕左,距离屏幕上,按钮宽度,按钮高度),”退出”); ⑶ Application.Quit(); //退出游戏 ⑷ Application.LoadLevel(); ⑸ audio.Play(); ⑹ audio.Pause(); ⑺ audio.Stop(); 21. 添加音频源组件
在Inspector?Add Component?Audio?Audio Source Audio Source属性Audio Clip绑定音频文件 Play On Awake:场景加载的时候播放音乐。 Loop:循环播放。
22. 代码优化 23. 发布设置
发布什么场景,双击场景
File?Scenes In Build?Add Current?发布Build
24. 添加天空盒子
⑴ 导入天空盒子:窗口键Assets?Import Package—>Skyboxes ⑵ 如何使用导入的天空盒子:Edit?Render Setting(渲染设置) ⑶ Skybox Material选择材质球来设置天空
25. OnCollisionEnter()函数 ⑴ 作用:检测游戏运行时,物体的碰撞,以及发生碰撞后应该执行的内容。
⑵ 发生碰撞的主体一定是要带刚体的,即只有带刚体的碰撞体去撞其他碰撞体时,双
方才会收到碰撞事件。(盒子碰撞体是Box Collider) ⑶ 把碰撞函数放在物体上。
⑷ 两个物体发生碰撞,如果要检测到碰撞信息,那么其中必有一个物体既带有碰撞器,
又带有刚体,且检测碰撞信息的脚本必须附着在带有刚体的碰撞器上 ⑸ 两个GameObject发生碰撞,要想检测到触发信息,最少要有一个刚体碰撞器并且
勾选了IsTrigger复选框,另一个最少要有一个碰撞器组件,此时检测碰撞的脚本必须附加在那个带有刚体的触发器上。 ⑹ 实现过程:①.新建一个场景。②.创建天空渲染选择图片。③.GUIText的标题
④设置GUIText内容居中?Anchor?Upper center⑤创建脚本menu—>
按钮开始或者退出游戏。⑥将脚本menu赋予在主摄像机上
涉及到界面绘画按钮等就在OnGUI函数中输写
//重新加载场景文件 //audio—>音频
二、孤岛
1. 需要u3d里一些资源包来创建小岛上的物体。 2. Water(Basic).unityPackage-------水资源包
Terrain Assets.unityPackage-------地形资源包