要點闆書
WWW.unity3d.com.cn
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.