13_unity common api

Name
object.Destroy(建議用這個(gè)病附,不會(huì)被立刻回收冤今,放在垃圾池里棺棵,再同意銷毀)
Object.DestroyImmediate(立刻銷毀谒撼,可能會(huì)導(dǎo)致控制幀)

destroy(**,5)食寡,可以設(shè)定銷毀時(shí)間

DontDestroyOnLoad, 在場(chǎng)景切換的時(shí)候廓潜,這個(gè)游戲物體抵皱,始終存在(可以用來設(shè)置共享物體)

FindObjectOfType
根據(jù)組件類型,查找組件辩蛋,在全局里進(jìn)行搜索呻畸,只找第一個(gè)就返回,不會(huì)去找多個(gè)

  1. FindObjectsOfType
    可以查找場(chǎng)景里所有的組件悼院,然后返回?cái)?shù)組伤为,不查找未激活組件
  2. 以上都是靜態(tài)方法
  3. 靜態(tài)方法就是通過類名來調(diào)用

Gameobject.Find(性能耗費(fèi)特別高,不要用在update里)
Gameobject.FindGameObjectsWithTag(查找所有有這個(gè)標(biāo)簽的物體据途,性能耗費(fèi)低一些)
Gameobject.FindWithTag(查找第一個(gè)有這個(gè)標(biāo)簽的物體绞愚,性能耗費(fèi)低一些)

  1. gameobject和component的禁用方法不一樣,
    gameobject, 用SetActive(false)
    component颖医,用enabled.
  2. unityexception(沒有設(shè)置標(biāo)簽)
  3. nullexception(標(biāo)簽沒有查找到)
  4. BroadcastMessage位衩,廣播后,所有的孩子都可以接收到這個(gè)消息熔萧,但是他本身不需要知道接受者是誰(只要看孩子的身上是不是有方法名)糖驴,可以降低耦合性僚祷。
  5. 沒有接受者,就無法接收贮缕,
    target.BroadcastMessage("Attack", null, SendMessageOptions.DontRequireReceiver);//不一定需要接受者辙谜,這樣就不會(huì)報(bào)錯(cuò)了
    14.直接在物體上,掛一個(gè)同名方法就好感昼,這樣就能直接叫到装哆,避免多重耦合的情況。(孩子都會(huì)被調(diào)用)
  6. sendMessage(只會(huì)針對(duì)物體一個(gè)抑诸,不會(huì)去叫他的孩子)
  7. sendMessageUpwards(和BroadcastMessage相反烂琴,用孩子去叫祖先)
  8. [ExecuteInEditMode],在編輯模式下蜕乡,也能運(yùn)行(加在特定的類上就行)
  9. Invoke()奸绷, 就是調(diào)用方法
  10. Coroutine,攜程部分
  11. InvokeRepeating()层玲,對(duì)某個(gè)方法進(jìn)行間隔調(diào)用
  12. Invoke号醉,不會(huì)影響別的腳本
  13. 沒有update(),就不會(huì)被禁用
  14. Invoke辛块,會(huì)將方法添加在隊(duì)列里面然后等待著畔派,IsInvoking會(huì)去隊(duì)列里面尋找,是不是被調(diào)用著润绵。調(diào)用了以后线椰,就會(huì)從隊(duì)列里移除。

協(xié)程:如果調(diào)用的是一個(gè)協(xié)程方法尘盼,那么調(diào)用完協(xié)程方法后憨愉,不會(huì)等這個(gè)方法執(zhí)行完,就繼續(xù)向下執(zhí)行了卿捎。
普通:如果執(zhí)行的是一個(gè)普通方法配紫,那么會(huì)等這個(gè)普通方法執(zhí)行完,然后繼續(xù)向下執(zhí)行

協(xié)程不會(huì)阻塞程序的執(zhí)行午阵,同時(shí)躺孝,可以在執(zhí)行過程中進(jìn)行暫停。

...
cube.GetComponent<MeshRenderer>().material.color
...
把組件里面的meshrender拿出來

...
Coroutines
1. 返回值是IEnumerator
2. 返回參數(shù)的時(shí)候是使用yield return null/0;
3. 調(diào)用方式:StartCoroutine(Method()); 再封裝一次底桂,開啟協(xié)程,不確定誰會(huì)先運(yùn)行
...

  1. 協(xié)程的關(guān)閉方式植袍,兩者開啟和關(guān)閉的方式需要意思一樣的

...
private IEnumerator ie;

if (Input.GetKeyDown(KeyCode.Space))
{
ie = Fade();
StartCoroutine(ie);
}
if (Input.GetKeyDown(KeyCode.S))
{
StopCoroutine(ie);
}
...

默認(rèn)時(shí)候,OnMouseUp這些都能做檢測(cè)籽懦,都能檢驗(yàn)出來
但如果有了trigger,就一定要保證project setting里的physcis->queries hit triggers為true

  1. enter, over, exit與鼠標(biāo)按不按下無關(guān)于个,down,drag, up這些是有關(guān)的

  2. OnMouseAsButton,必須要保證,按下和抬起是同一個(gè)物體才會(huì)觸發(fā)

  3. Epsilon, Infinity

  4. leap能做速度有變化的動(dòng)畫(先快后慢)猫十,看起來有幻影览濒,每次移動(dòng)都是恒定比例,不是恒定數(shù)值

  5. mathf.lerp(x,10, Time.deltaTime):按照真的時(shí)間去控制運(yùn)行

  6. mathf.LerpAngle

  7. mathf.MoveToWards拖云,勻速運(yùn)動(dòng)

  8. Mathf.PingPong

  9. input和mathf一樣贷笛,都是靜態(tài)方法

  10. Input.imeselected,和輸入法有關(guān)

  11. GetKey宙项,會(huì)一直監(jiān)聽乏苦。GetKeyUp/Down都只會(huì)觸發(fā)一次
    40.Conventional Game Input(名字列表),Input.GetKey("直接輸入名字")


    Conventional Game Input
  12. GetKey 和 GetMouseButton都是實(shí)打?qū)嵉陌存I尤筐,GetButton是指虛擬按鍵(我們自己定義的按鍵)汇荐,alt就表示備用的鍵,虛擬按鍵的好處就是盆繁,1)一個(gè)button鍵掀淘,可以對(duì)應(yīng)多個(gè)按鍵 2)名字任意命名,所以比較形象


    自定義按鍵
  13. Input.GetButtonDown("Horizontal")油昂,對(duì)軸的話革娄,一般不會(huì)去監(jiān)測(cè)按下和抬起

  14. GetAxis,直接拿漸變的值冕碟,可以模擬加速運(yùn)動(dòng)拦惋,cube.Translate(Vector3.right * Time.deltaTime*Input.GetAxis("Horizontal"));

  15. GetTouch,多指觸摸安寺,可以直接用esayTouch厕妖,更快

  16. acceleration,這個(gè)可以用來檢測(cè)重力挑庶,檢測(cè)陀螺儀言秸,檢測(cè)手機(jī)傾斜角度
    46.anykey(鼠標(biāo)+鍵盤)都可以識(shí)別和觸發(fā)

  17. mousePositon,像素位置

  18. Camera.main.ScreenPointToRay(); 鼠標(biāo)射線,這樣可以去檢測(cè)是否點(diǎn)到了游戲物體

  19. vector2, 可以表示二維向量挠羔,也可以表示二維坐標(biāo)(下井仰,-y, 上 y;左破加,-x俱恶,右 x)

  20. sqrMagnitude,還未開根號(hào)之前范舀,這樣出來的計(jì)算量小一些(性能優(yōu)化)
    ...
    void Start () {
    print(Vector2.down);
    print(Vector2.up);
    print(Vector2.left);
    print(Vector2.right);
    print(Vector2.one);
    print(Vector2.zero);

    Vector2 a = new Vector2(2, 2);
    Vector2 b = new Vector2(3, 4);
    print(a.magnitude);
    print(a.sqrMagnitude);
    print(b.magnitude);
    print(b.sqrMagnitude);
    
    print(a.normalized);//不會(huì)對(duì)a有影響合是,只是返回了一個(gè)單位值
    print(b.normalized);
    
    print(a.x + "," + a.y);
    print(a[0] + "," + a[1]);
    

    }
    ...

  21. vector2/3,他們倆都是結(jié)構(gòu)體锭环,不是類聪全,結(jié)構(gòu)體就相當(dāng)于把一堆變量做封裝

  22. a=Vector2.MoveTowards(a, target, Time.deltaTime);

Vector3

  1. vector3.Slerp:在AB之間進(jìn)行差值,ab是兩個(gè)向量辅辩,不是位置难礼,按照夾角娃圆、長度來進(jìn)行差值(適合做轉(zhuǎn)向,轉(zhuǎn)得平滑)

Random

  1. random.range//生成范圍蛾茉,不包含最大值
  2. random讼呢,靜態(tài)方法就直接通過類名來調(diào)用就好
  3. random.IniState, 初始化隨機(jī)種子谦炬,unity會(huì)自動(dòng)默認(rèn)每次生成的數(shù)字都不一樣悦屏,所以inistate可以愛寫不寫
  4. random.value//直接就是0-1,可以用來做顏色RGB生成
  5. Random.State;//只要是拿種子
  6. Random.Rotation;//用來控制四元數(shù)旋轉(zhuǎn),朝向
  7. Random.insideUnitCircle;//在長度為1的圓里键思,隨機(jī)生成各種二維坐標(biāo)

Quaternion

  1. x,z軸做自身繞軸旋轉(zhuǎn)础爬,y軸是繞著世界坐標(biāo)做旋轉(zhuǎn)
  2. 歐拉角(方便觀察)+四元數(shù)(方便計(jì)算)
  3. print(cube.rotation);//這是四元數(shù)
  4. cube.rotation = Quaternion.Euler(new Vector3(45, 45, 45));
  5. Quaternion. LookRotation
  6. Quaternion.Slerp//跟角度的話,一般都推薦s打頭

RigidBody

  1. RigidBody. centerOfMass
  2. RigidBody.Position吼鳞,通過剛體組件來修改位置的話看蚜,transform會(huì)在下一步更新,性能更高赔桌,比transform.position更快
  3. 直接用move.position失乾,還是這個(gè)比較好,會(huì)更平滑
    ...
    playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime;//簡單的幾次沒有問題
    playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime*10);//如果是多次改變纬乍,就用這個(gè)
    ...
  4. 通過剛體直接來修改rotation碱茁,就會(huì)更加快,效果會(huì)更好仿贬,更節(jié)約性能
  5. MoveRotation, MovePosition

Camera

  1. Camera組件的獲取方式
    ...
    public class API16Camera : MonoBehaviour {

    private Camera mainCamera;
    // Use this for initialization
    void Start () {
    mainCamera=GameObject.Find("MainCamera").GetComponent<Camera>();
    mainCamera = Camera.main;//直接用過tag來查找纽竣,但是這個(gè)就要保證tag不能變
    }

    // Update is called once per frame
    void Update () {

    }
    }
    ...

  2. 利用鼠標(biāo)射線,探究鼠標(biāo)與物體的碰撞方式
    ...
    void Update () {
    Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    bool isCollider= Physics.Raycast(ray, out hit);
    if (isCollider)
    {
    Debug.Log(hit.collider);
    }
    }
    ...

  3. 顯示射線方向
    Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
    射線的起點(diǎn)在屏幕上

Application

  1. dataPath


    datapath
  2. Streaming Assets
    聲音文件之類的茧泪,可以用datapath去查找


    Streaming Assets

    里面資源不會(huì)被打包蜓氨,放的是什么路徑,讀取的時(shí)候就是什么路徑队伟,不會(huì)被做成unity的格式穴吹,資源不會(huì)被合并

  3. 各種目錄
    ...
    void Start () {
    print(Application.dataPath);//返回工程所在目錄
    print(Application.streamingAssetsPath);//文件流讀取數(shù)據(jù)
    print(Application.persistentDataPath);//可以固有化數(shù)據(jù)
    print(Application.temporaryCachePath);//臨時(shí)目錄數(shù)據(jù)
    }
    ...


    image.png
  4. Application下常用變量(多靜態(tài))
    companyName
    identifier(用來表示包名)
    installName
    installMode
    isEditor
    isFocused
    isPlaying
    platform
    RuntimePlatform//判斷當(dāng)前的平臺(tái)
    isPlaying
    Quit
    OpenURL
    79.Application,做各種自我判斷
    ...
    void Start () {
    print(Application.identifier);
    print(Application.companyName);
    print(Application.productName);
    print(Application.installerName);
    print(Application.installMode);
    print(Application.isEditor);
    print(Application.isFocused);
    print(Application.isMobilePlatform);
    print(Application.isPlaying);
    print(Application.platform);
    print(Application.unityVersion);
    print(Application.version);
    print(Application.runInBackground);

    Application.Quit();//build出來之后使用的
    Application.OpenURL("www.sikiedu.com");
    ScreenCapture.CaptureScreenshot("游戲截圖");
    

    }

    // Update is called once per frame
    void Update () {
    if (Input.GetKeyDown(KeyCode.Space))
    {
    UnityEditor.EditorApplication.isPlaying = false;//只能在編譯器情況下使用
    }
    }
    ...


    自我判斷

scene

  1. AsycOperation.progress


    AsycOperation
  2. SceneManager


    sceneManage
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嗜侮,隨后出現(xiàn)的幾起案子港令,更是在濱河造成了極大的恐慌孤澎,老刑警劉巖素跺,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異澎嚣,居然都是意外死亡击吱,警方通過查閱死者的電腦和手機(jī)淋淀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來覆醇,“玉大人朵纷,你說我怎么就攤上這事炭臭。” “怎么了袍辞?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵徽缚,是天一觀的道長。 經(jīng)常有香客問我革屠,道長,這世上最難降的妖魔是什么排宰? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任似芝,我火速辦了婚禮,結(jié)果婚禮上板甘,老公的妹妹穿的比我還像新娘党瓮。我一直安慰自己,他們只是感情好盐类,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布寞奸。 她就那樣靜靜地躺著,像睡著了一般在跳。 火紅的嫁衣襯著肌膚如雪枪萄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天猫妙,我揣著相機(jī)與錄音瓷翻,去河邊找鬼。 笑死割坠,一個(gè)胖子當(dāng)著我的面吹牛齐帚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彼哼,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼对妄,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了敢朱?” 一聲冷哼從身側(cè)響起剪菱,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拴签,沒想到半個(gè)月后琅豆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡篓吁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年茫因,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杖剪。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冻押,死狀恐怖驰贷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洛巢,我是刑警寧澤括袒,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站稿茉,受9級(jí)特大地震影響锹锰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漓库,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一恃慧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渺蒿,春花似錦痢士、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至少态,卻和暖如春城侧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彼妻。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國打工赞庶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澳骤。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓歧强,卻偏偏與公主長得像,于是被迫代替她去往敵國和親为肮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摊册,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容