Unity笔记- 狗刨学习网 - 图文 下载本文

一、射弹游戏

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-------地形资源包