Unity3d 要点板书
Unity Project unity的项目文件/专案
Scene unity的场景文件
Scene 场景视窗
Game 预览视窗
H... 物件视窗
Project项目/专案管理视窗
I.。。。。属性栏(监测视窗)
材质 MeshRenderer
组件
第三人称控制器自动捕捉的是带有MainCamera标签(tag)的摄像机
子文件夹含有Assets文件夹 unity项目文件
aaa.Unity Scene File unity场景文件
aaa.UnityPackage unity资源(可导入到unityProject视窗)
Fbx格式为unity支持模型格式
Unity中最节省资源的图片格式为PNG
投影遮罩
点光源投影遮罩图片需要是CubeMap
点光设置实时影子
Edit->ProjectSettings->Player
File->BuildSettings –>PlayerSetting
->OtherSettings->RenderingPath->DeferredLighting
点光烘焙影子
RenderingPath->forward(在场景中看不到实时影子效果
但是,在LightMapping中烘焙之后影子即可显现出来)
平行光不能直接添加太阳光效果,必须通过组件的方式
Component->Effets->LensFlare
静态物体的影子只能投放在静态物体身上
层
天空盒 Edit –> RenderSettings 找到SkyboxMaterial
正交摄像机(没有透视关系)用于小地图
11.6
光源侦测
- 1. 任意选择场景中的物体,添加光源侦测组件
Component –> Rendering –> LightProbeGroup
- 2. 添加侦测小球AddProbe
- 3. 烘焙LightMapping
注意:设置静态Static
烘焙两次第一次烘焙侦测小球BakeProbes
第二次烘焙场景BakeScene
- 4. 选择需要利用侦测的物体,如cube(不需要设置静态),
并找到组件MeshRenderer下的UseLightProbes进行勾选
刷地形
准备:先设置大小400*400 厚度30
预置物
11.7
Terrain组件设置中 Case shadows选项若取消勾选地形及花草树木
影子不被烘焙(注意:烘焙后才能看到效果)
树如果需要受风影响必须在Terrain组件中找到
创建树按钮->并到EditTree->设置BendFactor参数必须大于0
轨迹追踪component->Effects -> TrailRenderer
11.10
l 刚体Rigidbody
IsKinematic 取消刚体物理属性
l 物理材质PhysicMaterial
l 音效AudioSource
一般背景音效为2D音效选择背景音效取消3DSound勾选->Apply
3D音效可设置范围,将MaxDistance放大或缩小范围,
将VolumeRolloff音效曲线设置成LinearRolloff
Mute静音
PlayOnAwake游戏一运行就开始播放
Loop 循环播放音效
Volume 音量大小
l 脚本
移动的写法
transform.position += Vector3.up * speed; //世界坐标
transform.position += new Vector3 (0, 0, 0.02f); //世界坐标
transform.Translate (0, 0, 0.02f);//自身坐标
transform.Translate (0, 0, 0.02f,Space.World);//世界坐标
transform.position.x/y/z 用于判断
transform.position = new Vector3 (0, 0, 0);定义物体位置
11.11
Unassigned….. 此错误提示说明有物体没有给
transform.eulerAngles.y >= 30//用于角度判断
transform.eulerAngles = new Vector3(10, 10, 10);//定义物体角度
l 鼠标位置移动是以像素为单位
物体位置/大小Position/Scale 以米为单位
l 注意:利用GUITexture制作光标换图效果必须先将GUITexture位置坐标归0
l Edit -> ProjectSettings -> Input
Input.GetKey。。。 输入键盘上的键(返回值是Bool)
Input.GetButton。。。自定义按钮(返回值是Bool)
应用Input.GetAxisRaw时(返回值是float)
Input.GetAxis
Raw ("Vertical/ Horizontal ")
Negative Button 负按钮(返回值是-1)
Positive Button 正按钮(返回值是1)
应用Input.GetAxis时(返回值是float)
Input.GetAxis("Vertical/ Horizontal ")
Negative Button 负按钮(返回值逐渐过渡到-1)
Positive Button 正按钮(返回值逐渐过渡到1)
11.12
OnMouseDown()..是指物体受到鼠标点击,此函数运行时只执行一次
OnMouseOver()此函数运行时会一直执行
只能用在带有碰撞的物体及GUITexture,GUIText
l 注意:OnMouseDown()..与Input.GetMouseButtonDown(0)区别
Input.GetMouseButtonDown(0)就是指鼠标点击,不论脚本给谁,点击任意地方都可执行效果
OnMouseDown()..带有此函数的脚本给谁,谁才发生作用(并且是受到鼠标点击)
public Light myLig;
myLig.enabled = false;//单独组件的勾选
gameObject.SetActive(false);//整个物体的勾选
练习:通过F1、F2、F3三种摄像机切换
(1. 正常视角2.俯视图3.围绕场景旋转摄像机)
OnDisable ()
是指物体最上方勾选取消时调用
OnEnable()
是指物体最上方/单独组建(脚本本身组件)勾选激活时调用
Ctrl + R刷新
11.13
l 如果物体需要通过脚本更改透明数值的话,必须先将Shader更改成
注意:
不同方法之间调用时(如OnMouseDown()与Update()之间)
有的数值只读时怎么办(如guiTexture.color.a, transform.position.x)
一键控制时(bool=!bool ,int=-int)
来回循环效果(a+=b,将b取反,判断a的值)
l 换服装,换装备
Material材质球
renderer.material.mainTexture = myTexture[0];
Mesh 网格(外形,形状)
GetComponent<MeshFilter>().mesh = myMesh[0];
l 动画如果需要只播放一次,需要找到此动画的模型源文件
脚本控制播放一次动画后,切换到其他动画
if(!animation.IsPlaying("Attack02"))//如果没有播放Attack02动画
animation.Play("Idle");
l
分别意思为:
清除所有
重复的提示只显示一行
只显示最新打印效果(一般都需要按下)
只要出现警示,就暂停运行(一般不需要按下)
l
分别意思为:
打印输出
提示
错误提示
11.14
Animation
l 创建animation,然后选择动画到 选到Debug
调节数值
不要忘记再调节成Normal
先时间后位置
一个动画多个利用:(如:物1模拟物2)
- 1. 先明白原理,动画的运动是相对运动
- 2. 创建空物体与世界坐标原点重合
- 3. 将物1与物2动画中的起始位置重合(Reset)
- 4. 将物1与空物体打组,空物体为父级,移动空物体到任意位置即可实现。
触发事件(触发器)
- 1. 两者必须都有碰撞
- 2. 其中之一isTrigger勾选,两者都勾选也可
- 3. 动的物体加刚体/本身带有组件
11.17
实例化(诞生)
l Instantiate(诞生的物体,诞生物体的位置,诞生物体的角度);
l Destroy(消失的物体,消失的时间)
11.18
l public BoxCollider[] house;
void Start () {
house = GetComponentsInChildren<BoxCollider> ();
//获取自己及子级含有BoxCollider组件的物体
}
l if (Input.GetMouseButtonDown (0) && Time.time >= nextTime)
nextTime = Time.time + 2;//过2秒执行一次效果
l gameObject.AddComponent("Rigidbody"); //添加组件
l transform.LookAt (enemyFirstPos);//Z轴朝向enemyFirstPos(Vector3)
l Vector3.Distance (transform.position, first.position)//判断距离
l guiTexture.pixelInset=newRect (Screen.width/2,Screen.height/2,Screen.width*0.1f,Screen.height*0.1f);
//宽度与屏幕匹配
11.19
自动寻路
l 制作步骤:
- 1. 确定需要寻路的物体,并添加组件
- 2. 将场景中静止的物体设置静态static
- 3. 给需要寻路的物体添加脚本
public Transform target;
void Update () {
GetComponent<NavMeshAgent>().SetDestination (target.position);
}
- 4. 到Window中找到
- 5. Bake
l 属性分别为:
寻路物体的外层碰撞半径
寻路物体的速度
寻路物体的加速度
寻路物体的角速度(查看效果时:注意物体面向的角度)
寻路物体与目标物的停止距离
寻路物体的外层碰撞高度
寻路物体的外层碰撞高度位置
l 自动寻路区分层
- 1. 在寻路视窗添加层
- 2. 选中需要添加寻路层的物体,选择到相应的层
- 3. Bake
- 4. 将需要自动寻路的物体选择可以行走的层
l 每次从初始动画开始播放
l 停止播放动画
animation.Stop("run");
l 数值转成字符串
guiText.text = score.ToString();
l 血条
public GUITexture blood;
void Update () {
blood.pixelInset = new Rect(blood.pixelInset.x,blood.pixelInset.y,
nowBlood/maxBlood*myGuiTextureWidth,blood.pixelInset.height);}
l 切换场景
if (firstEnemyPos <= 5) {
nowBlood -= 5.0f;
if(nowBlood <= 0){
nowBlood = 0;
// Application.LoadLevel("GameOver"); //一方法
Application.LoadLevel(1);//切换场景// 二方法
}
}
注意:不要忘记将场景文件拖到发布视窗
11.20
l 自动寻路蓝色区域烘焙属性
寻路蓝色区域与障碍物之间半径
寻路蓝色区域与地面的高度
寻路蓝色区域烘焙最大高度
寻路蓝色区域烘焙最大台阶高度
11.21
l 阶段项目
l 资源导出
如:模型,选择模型->右键选择selectDependencies
11.26
关节
铰链关节
固定关节
弹簧关节
OnJointBreak()关节断开时调用
OnTriggerEnter。。。触发器
OnCollisionEnter.. 碰撞器
Unity播放视频
- 1. 必须安装QuickTime播放器
- 2. 影片格式不能是FLV格式
播放视频MovieTexture
public MovieTexture movTexture;
void Start() {
renderer.material.mainTexture = movTexture;
movTexture.Play();
}
11.28
配环境:单位调成米,自动保存的数量及时间,max点的大小
l Alt + 鼠标中键 旋转
Alt + W 视窗最大/最小化
一直按住Shift键 复制
Z 快速将物体到屏幕中心显示
F4 线框显示
X 显示/隐藏坐标位置
l 吸附 , 点吸附
l 锁定角度 ,
l 调整坐标位置 -> -> 调节到需要的位置即可
l 选中 -> 加线
l 选中 -> 两点之间加线
l 选中 -> 挤出
l 不连续一圈线
连续一圈线
l 删除线 退格键(但点还保留在模型上)
删除点跟线 Ctrl + 退格键(点跟线都删除)
l 补面:选择 ->
l 镜像
l 打组是 取消是Ungroup
Attach是 取消是
l 打组Group与Attach区别
Group打组后在unity显示是
Attach在unity中显示是
12.1
Max贴图(分UV)
先找到 ->U…UVW
给物体棋盘格->快捷键M(调到材质球)-> 点击选择->找到 -> 设置图片重复倍数
将棋盘格材质球给到物体上
->
法线贴图(凹凸贴图)
12.2
Shader应用
CubeMap
1. 将物体的shader更改为
2. 创建CubeMap
3. 将CubeMap指认到相应位置
4. 选择CubeMap到 -> 找到脚本应用即可
5. 创建脚本RenderCubemapWizard,放到Project视窗中即可,注意脚本中
@MenuItem("GameObject/Render into Cubemap"),是指在GameObject找到Render into Cubemap
RenderFromPosition,是指需要反射的物体
CubeMap,是指帮助反射第二步创建的CubeMap
12.8
Network
客户端 服务器
后台实时运行
->
l [RPC]
//接收消息(服务器,客户端只要带有[RPC]标识,即可互相接受消息)
void MyMessage (string myMessage02,NetworkMessageInfo info)
{
message += "\n" + "发送者" + info.sender + myMessage02;
}
调用MyMessage方法
networkView.RPC("MyMessage",RPCMode.AllBuffered,传入的信息);
l 使用RPC调用网络请求必须添加组件NetworkView
12.10 NGUI
l
1. 制作Sprite(精灵)
2. 到NGUI中Great->Sprite
3. 精灵显示样式,Filled为填充样式
此选项可制作效果,调整参数
若向反向旋转
l
1. 制作图集,点击New,创建新图集
2. 选择图片
3. 点击Creat
l 注意血条制作 制作精灵,并在此选项中
选到,调整FillAmount数值
l 如何将Sprite形成按钮?
添加组件
l 如果想让按钮有事件,必须添加碰撞,BoxCollider
注意将BoxCollider勾选
l 想让Lable随着按钮范围始终填充状态
选测Anchors将Target选择你要绑定到的物体
l 若将整个按钮与屏幕位置分辨率匹配,再将sprite的Anchors下的Target选择为UIRoot
补充:若在Android平台发布出现SkyBox像素不清晰,选择到相应图片,将图片设置成
l NGUI如何支持中文,制作NGUI字体集
一方法:
1. 创建空物体,添加UIFont组件
2.
将FontType设置为Dynamic
在TTF Font添加字体
3. 然后将空物体形成预置物(形成NGUI字体集)
4. 到UILable属性中 点击Font
选择刚才制作的字体即可。
二方法:直接更改属性 ,将原来NGUI选项选成Unity,将需要的字体拖到后方即可。
l
九宫格
用于NGUI优化,只用一张图的某一部分像素,但即使放大也不影响清晰度
选择Sprite到Edit
调节Border选项,选择图片中需要的像素部分, -> 返回到Sprite
-> 注意将sprite的Type设置成Sliced
l 滑动效果
1. 创建sprite,创建
2. 将sprite添加
3. 将 与sprite打组, 为父级
4. 注意将 拖到sprite属性 中
l 延伸->在按钮滑动效果添加sprite ,sprite与 大小一致,在sprite范围内也可以实现滑动效果
将sprite同样添加 组件即可。
注意:深度值
12.11
l Animation
Mecanim
Avater(Mecanim可识别骨骼的标识)
Retargeting(动画的互相应用)
AvaterMask(骨骼遮罩)
Weight 权重
权重是指某个动画层在整个动画中的影响,
若权重值为1则此层动画将与整个动画融合
若权重值为0则此层动画与整个动画完全不融合
12.13
l Unity 2D
将图片放到项目管理视窗中,更改图片格式为Sprite
如果精灵需要切割成多张,将SpriteMode更改为Multiple
如果只是一张精灵,将SpriteMode设置为Single
l 2D动画
将需要结合在一起形成2D动画的精灵,选中拖到场景视窗中,会有窗口弹出,提醒保存动画,将动画保存即可形成2D动画。
注意:
若需要精灵形成触发事件,则添加2D碰撞,2D刚体,并且2D刚体中
不要将IsKinematic勾选,否则触发事件不会形成。
若完全不需要重力,将GravityScale设置为0.
Unity3d 要点板书的更多相关文章
- Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)
原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/ U3D集成移动MM的SDK绝对是以坑爹为主的东西. 浪 ...
- Unity3D Layer要点
简介 Layer可以用于光照的分层和物理碰撞的分层,这样可以很好地进行性能优化 数据结构 Layer在Unity中有3中呈现方式:1.string名字,2.int层索引 ...
- 关于Unity3D手机网游开发一些小看法
它的知识技能和职责,我就不仔细说了,说细了有一点像招聘启示.他的主要职责虽然负责技术,但是也给产品决策和方向提供一些决策.他最主要的考核指标,就是经验很重要,最好主导或参与过一款网络游戏的开发.举个例 ...
- Unity3D手游开发实践
<腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...
- Unity3D 学习笔记
不是什么技术文章,纯粹是我个人学习是遇到一些觉得需要注意的要点,当成笔记. 1.关于调试,在Android下无法断点,Debug也无法查看,查看日志方法可以启动adb的log功能,或者自己写个GUI控 ...
- Unity3D 5.1烘培 操作
http://blog.csdn.net/asd237241291/article/details/48056575 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 Unity3D引擎技 ...
- 从一点儿不会开始——Unity3D游戏开发学习(一)
一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...
- (转)火溶CEO王伟峰:Unity3D手机网游开发
今天看到这篇文章,感觉很不错,尤其是那句“Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用”. 转自http://blog.csdn.net/wwwang891 ...
- 使用 Mono.Cecil 辅助 Unity3D 手游进行性能测试
Unity3D 引擎在 UnityEngine 名字空间下,提供了 Profiler 类(Unity 5.6 开始似乎改变了这个名字空间),用于辅助对项目性能进行测试.以 Android 平台为例 ...
随机推荐
- js cookie读取
/**存放Cookies: 两个参数,一个是cookie的名子,一个是值*/ function SetCookie(name,value){ var Days = 30; //此 cookie 将被保 ...
- PBOC/EMV 中SDA和DDA简介
PBOC/EMV里有两个非常重要的概念,SDA(static data authentication)和DDA(dynamic data authentication),分别叫做静态数据认证和动态数据 ...
- 一步一步学习SignalR进行实时通信_6_案例
原文:一步一步学习SignalR进行实时通信_6_案例 一步一步学习SignalR进行实时通信\_6_案例1 一步一步学习SignalR进行实时通信_6_案例1 前言 类的定义 各块功能 后台 上线 ...
- java--工具方法
根据时间戳得到具体的时间: public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat(& ...
- 使用 Node.js 做 Function Test
Info 上周 meeting 上同事说他们现在在用 java 写 function test,产生了很多冗余的代码,整个项目也变得比较臃肿.现在迫切需要个简单的模板项目能快速搭建function t ...
- 解决Easyui1.3.3 IE8兼容性问题
事先声明:项目在Firefox和Chrome上完美运行,在MSIE9.MSIE10上基本没问题,但是放在MSIE8上面运行问题就出来了.登录系统后,系统页面跳动,导致系统无法使用:我使用的是Easyu ...
- winform CheckedListBox实现全选/全不选
/全选 private void button3_Click(object sender, EventArgs e) { for (int i ...
- 还是log4net的使用
最近做个项目要用到日志系统,这这可把我给难住了,后来问了下度娘,发现只有你想不到的,没有那些找不到的开源组件,后来发现了log4net,但是我是控制台程序,没有个实例还真不好搞,想想还是看看他的运行过 ...
- ASP.NET动态引用WebService接口
尊重原著作:本文转载自http://www.mhzg.net/a/20124/20124912180589.html 有经验的朋友都知道,通常我们在引用webservice的时候,是在项目中就添加了引 ...
- SqlServer mssql 按月统计所有部门
以订单统计为例,前端展示柱状图(Jquery统计): 表及主要字段描述如下:表名:Orders1.日期CreateTime2.金额Amount3.用户UserID 情况一:根据部门统计某一年每月销量( ...