跟了兩個官網tutorial了,來總結下都學了些什么吧。
在Unity里做出一個游戲的基本流程是什么呢?(一個單場景的游戲)
1. 把游戲里會出現的“物品”都擺進去并設置好(包括UI)
2. 調整鏡頭和光線(2d游戲可能不大需要)
3. 通過腳本讓“物品”動起來、“物品”和“物品”產生交互、“物品”和玩家產生交互
下面主要總結步驟1和3的關鍵點
一、把游戲里會出現的“物品”都擺進去并設置好
Game Object:核心!所有的其他東西都依托于Object,每個Object負責自己的功能,然后它們合作把游戲完成(這就是所謂的面向對象的編程吧)。
Empty Object:特殊的object,用作容器??裳b物品,也可裝邏輯。
Rigidbody:要用到物理機制就要加Rigidbody
關鍵屬性 Use Gravity,Is Kinematic(不受物理力作用),Drag和Angular Drug(空氣阻力)
Collider:有碰撞就要有Collider
有碰撞后反應就要勾Trigger;有多種mesh形式
Materials:textures轉成materials再加到物體上(有待進一步學習)
Prefabs:拖到的prefabs文件夾下的物品就會變成prefab,會多次出現的物品適合做成prefab
二、腳本
基本結構(個人理解而已):
變量 --> 函數 --> 邏輯 --> API
1. 變量
public的是要引用某個物品的,或者要在inspector設定數值的
private的只在當前腳本中使用的
目前見到的數據類型有float、int、bool、GameObject、Rigidbody、Vector3、Text、GameController、Boundary、AudioSource (待研究)
*變量名首字母通常小寫
2. 函數
默認的四函數Start()、Update()、 FixedUpdate()、LateUpdate()(Awake暫時沒接觸)
其他自帶函數OnTriggerEnter()、OnTriggerExit()(更多待了解)
unity自帶函數會在預定條件下觸發,自建函數則自行調用
自建函數:
通常不需要返回值的都是void
要在其他腳本中引用的就是public void
協程返回值是IEnumerator
*函數名通常首字母大寫
3.邏輯
目前用到的有:if(){},for(;;){},while(){}
for和while會一直循環到結束才會跳出(沒有跳出指令的話)
return:跳出函數并返回值
break:終止循環
和上面兩個一套的應該還有一個continue,是跳過當前循環并開始循環的一次新迭代
參考:http://www.cnblogs.com/iceword/archive/2010/06/04/1751382.html
4. API
感覺unity真的是提供了好多好多的api啊,掌握unity的關鍵一步可能也就是熟悉這些api吧
目前用到過的:
獲取組件
GetComponent<>()
Debug
Debug.Log()
Input系列
Input.GetAxis("Horizontal"); Input.GetAxis("Vertical")
Input.GetButton("")
Input.GetKeyDown (KeyCode. )
gameObject系列
物體名.gameObject.SetActive()
物體名.gameObject.CompareTag(" ")
GameObject.FindWithTag("...") 返回標有該tag的物體
Rigidbody系列
rb.AddForce() ?(rb是裝rigidbody的變量名)
rb.rotation: rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * -tilt);
rb.velocity
rb.position
rb.angularVelocity
銷毀物體
Destroy(xx.gameObject)
從prefab生成instance
Instantiate(原型,位置,旋轉)
text系列
.text
.toString
數學函數集錦 mathf:
mathf.CLamp(,,)
Random系列
Random.Range(,)
Random.insideUnitSphere
協程函數等待
yield return new WaitForSeconds(...)
當前時間
Time.time
音頻播放
audioSource.Play()
重新加載場景
Application.LoadLevel(Application.loadedLevel)?已廢
用SceneManager 就可以啦
using UnityEngine.SceneManagement;
SceneManager.LoadScene(場景的build index);
5.其他
單獨類的建立
類前要加[System.Serializable]
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
###最后 ,警惕 大小寫!
2016.07.25 接下來準備找幾個2D教程來看下