unity3d小技巧

這是以前剛開始學(xué)unity時遇到的一些問題的筆記甫菠,現(xiàn)在看來有些幼稚,但是還是發(fā)出來給剛?cè)腴T的同學(xué)參考一下。


1. 如何在game模式下放大縮小視圖:控制camera的size

2.如何獲取圖片的長寬:background is a Gameobject? ? ? ? height = background.GetComponent().sprite.bounds.size.x;? ? ? ? width = background.GetComponent().sprite.bounds.size.y;

3. 手指移動相機并限定移動范圍

```

if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)

{

if ((transform.position.x >= leftborder) && (transform.position.x <= rightborder))

{

// Get movement of the finger since last frame

Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;

// Move object across XY plane

transform.Translate(-touchDeltaPosition.x *Time.deltaTime, 0, 0);

}

transform.position = new Vector3(Mathf.Clamp(transform.position.x,leftborder,rightborder),transform.position.y,transform.position.z);

}

```

4. 每秒調(diào)用:InvokeRepeating(string methodName, float time, float repeatRate)

methodName : 要調(diào)用的方法? ;? time:幾秒后開始調(diào)用? ;? repeatRate:? 每幾秒調(diào)用一次

注意:在Start()中使用

5. 如何通過標(biāo)簽find一個物體 :GameObject.FindGameObjectWithTag()

6. Instantiate(Object original, Vector3 position, Quaternion rotation);

在position處創(chuàng)建一個旋轉(zhuǎn)度為rotation的物體original

7. 觸摸輸入

1) Input.touchCount? 獲取觸摸點數(shù)

2) foreach( Touch touch in Input.touches)? //遍歷觸摸點數(shù)

3) Input.GetTouch(0).phase == TouchPhase.Began? //一旦第一次觸摸

PS: GetTouch( int index )? ? //index是類似觸摸數(shù)組的指針

8. Vector2.magnitude? :求向量的長度

9.unity中的幾種數(shù)據(jù)存儲方式:1)PlayerPrefs 2)ScriptableObjects 3)Databases 4)自定數(shù)據(jù)文件

10. Unity中所有的UI都要放在Canvas中鸯旁,不然沒法渲染

11. Ui中的Grid Layout Group組件(網(wǎng)格布局組):可以把UI當(dāng)成組在一起操作。

屬性:1.padding(墊充)嗜浮,影響ui組在網(wǎng)格中的的初始位置

? ? ? ? ? 2.Cell Size(單個大邢勰丁)

? ? ? ? 3.Space(cell間隔)

? ? ? ? 4.cell組開始布局的角

? ? ? 5.Start Axis(布局橫縱向)

? ? ? 6.Child Alignment (網(wǎng)格中的布局位置)

12. Canvas中Canvas Scaler組件中的 UI Scale Mode(UI儲尺寸模式):1. ConstantPixelSize(尺寸恒定,使用像素大小模式)2. ScaleWithScreenSize(比例隨屏幕大小改變模式)3. ConstantPhysicalSize(恒定外形尺寸危融,由物理單位指定大形访)

13. 可以給Text添加outline/shadow組件,給字體添加效果

14. Canvas的子物體如果顯示過大吉殃,可以通過調(diào)節(jié)物體scale來調(diào)小

15. 物體變大:

```

Another method()

{

StartCoroutine(Scale(new Vector3(0.1f, 0.1f), new Vector3(1, 1)));

}

public IEnumerator Scale(Vector3 from, Vector3 to)

{

float progress = 0;

while (progress <= 1)

{

transform.localScale = Vector3.Lerp(from, to, progress);? //放大

progress += Time.deltaTime;

//print(progress);

yield return null;

}

transform.localScale = to;

}

```

16. 設(shè)置物體的可見辞居,可以使用函數(shù) SetActive(bool)

查看它的可見否屬性使用 (bool) activeInHierarchy

ps: 如果物體一開始就是not active的,那么程序中將入法直接獲取到它蛋勺。

17. 防御范圍可以用 Gizmos類中的Gizmos.DrawWireSphere()設(shè)置一個區(qū)

18. 鼠標(biāo)移動屏幕:先設(shè)置一個float作為像素高瓦灶,在if判斷中Input.mousePosition的x,y 》= Screen.height – 像素高

19. 滾輪調(diào)節(jié)視角高度:

先設(shè)置一個滾動速度scrollspeed,然后接受一個float scroll來接受Input.GetAxis(“Mouse ScrollWheel”);

然后設(shè)置一個Vector3? pos接受相機位置抱完;然后設(shè)置它pos.y -= scroll * sccrollspeed * Time.deltatime;

注意要限制相機的上下界贼陶, 用clamp()函數(shù)。

20. Physics.OverlapSphere:返回所有在區(qū)域區(qū)域中的collider[];

21. 快速調(diào)節(jié)物體到另一個物體的位置上:右擊物體的Transform組件巧娱,選擇copy component

22. 將實例化的對象放在一個空對象下:virus.transform.parent = Virusparent.transform;

23. 物體調(diào)成Debug模式時可以看到腳本參數(shù)的變化

24. 暫停和繼續(xù):Time.timeScale = 0f; Time.timeScale = 1f;

25. 場景的加載: 調(diào)用UnityEngin.SceneManager中的LoadScene(string)函數(shù),通過改變string實現(xiàn)想不同場景的跳轉(zhuǎn)碉怔。

**重新開始**:SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);? ? 調(diào)用當(dāng)前活躍的場景。同時要設(shè)置? ? ? ? Time.timeScale = 1f;

26. Panel的淡入淡出:? 給panel加一個Canvase Group和animator組件禁添,在animation中創(chuàng)建新動畫撮胧,點選一個時間點將canvase group中的Alpha設(shè)置為0或1;

27. 給按鈕加點擊動畫:將Button組件中的transition選項調(diào)成Animation,然后設(shè)置四個按鈕狀態(tài)的動畫

28. 使用協(xié)程:StartCoroutine(method());

IEnumerator method(){ yield return WaitForSeconds()}? ? 協(xié)程和線程跳轉(zhuǎn)有點像老翘,在wait階段將程序控制權(quán)交出芹啥,執(zhí)行外部代碼锻离,當(dāng)wait階段完成后拿回控制權(quán)繼續(xù)執(zhí)行本段后續(xù)代碼

29. canvas 中UI的自適應(yīng):把錨點拖到對應(yīng)的四個藍色實心點上。更改canvas scaler屬性為如圖:? ? 其中Match為0時表示豎屏墓怀,1時表示橫屏

30. 場景自適應(yīng)問題:改變相機視口汽纠。

實際視口 = 初始視口 * 初始高寬比 / 實際高寬比

31.實現(xiàn)場景的淡入淡出效果

首先創(chuàng)建一個canvas,在其下創(chuàng)建一個image 并自定義它的顏色傀履。

然后寫一個腳本貼在canvas 上疏虫。

腳本中需要拿到image,并且聲明一個AnimationCurve .在Start 中使用協(xié)程調(diào)用淡入啤呼、淡出函數(shù)。

31. 在update()中調(diào)用有協(xié)程的函數(shù)注意點“:

因為是每幀調(diào)用的所以要設(shè)置一個bool判斷條件再調(diào)用有協(xié)程的函數(shù)呢袱,并且隨后置反官扣,再協(xié)程中再置回。

32. 實現(xiàn)血條:添加Slider羞福,將canvas的坐標(biāo)改為世界坐標(biāo)惕蹄,Slider中的子類物體只留下Fill 和background ,并將Fill置為background子類治专,將Fill的Stretch改為隨父類大新袅辍:Alt + 右下角最后一個。通過修改COLOR設(shè)置前置张峰,后置背景的顏色泪蔫。另外,如果是實現(xiàn)環(huán)形血條喘批,只要把Fill Area下的Fill對象的Source Image設(shè)置為你預(yù)先準(zhǔn)備好的環(huán)形血槽圖片撩荣,然后把Image Type改為Filled,F(xiàn)ill Method改為Radial 360.即可

33. 單機游戲儲存內(nèi)容小饶深,所以可以使用assess數(shù)據(jù)庫餐曹。Access是一種只適合數(shù)據(jù)量少的應(yīng)用的桌面數(shù)據(jù)庫,處理少量和單機訪問的數(shù)據(jù)庫時效率會很高敌厘。

34. 使用DontDestoryOnLoad()時台猴,要確保依附對象為單例模式。避免重復(fù)生成對象俱两。最直觀的反例就是場景切換后背景音樂重疊

35.實現(xiàn)粒子系統(tǒng)檢測碰撞時饱狂,勾選粒子系統(tǒng)下的Trigger選項條,然后設(shè)置Collider對象(被檢測對象)锋华,inside,ouside,enter,exit為觸發(fā)條件(即粒子在對象的各種情況下時觸發(fā))嗡官。可以選擇滿足條件后對應(yīng)的反應(yīng)(ignore,kill,callback)毯焕,ignore為無反應(yīng)衍腥,kill為消除觸發(fā)粒子磺樱,callback是自定義反應(yīng)。要實現(xiàn)callback要在對應(yīng)的新建腳本中使用ParticlePhysicsExtensions.GetTriggerParticles()(以及你要指定的ParticleSystemTriggerEventType)來確定哪些粒子滿足哪些條件婆咸。然后將腳本掛載在對應(yīng)粒子系統(tǒng)上竹捉。詳情見文檔。

36.Physics.Raycast只能用于檢測3d碰撞尚骄,如果要射線檢測2d碰撞用Physics2D.Raycast

37.【四種坐標(biāo)系的轉(zhuǎn)換】

1块差、世界坐標(biāo)→屏幕坐標(biāo):camera.WorldToScreenPoint(transform.position);這樣可以將世界坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)。其中camera為場景中的camera對象倔丈。

2憨闰、屏幕坐標(biāo)→視口坐標(biāo):camera.ScreenToViewportPoint(Input.GetTouch(0).position);這樣可以將屏幕坐標(biāo)轉(zhuǎn)換為視口坐標(biāo)。其中camera為場景中的camera對象需五。

3鹉动、視口坐標(biāo)→屏幕坐標(biāo):camera.ViewportToScreenPoint();

4、視口坐標(biāo)→世界坐標(biāo):camera.ViewportToWorldPoint();

5. 絕對坐標(biāo)轉(zhuǎn)相對坐標(biāo) InverseTransformPoint(transform.position);

Debug.Log(vec);//打印出來是(0宏邮,0泽示,0);與上面不一樣

6. ? 相對坐標(biāo)轉(zhuǎn)絕對坐標(biāo) ? ? ?transform.TransformPoint(transform.localposition);

38.鉸鏈(hinge joint)

39.animation播放動畫:If you select your animation in theProjectwindow, then go to the top right corner of theInspectorwindow and selectDebugfrom the drop down menu (next to the lock), then change theAnimation Typeto 1 will mark it as Legacy.

40.**UI字體縮小模糊**:canvas渲染模式調(diào)成世界空間蜜氨,scale factor/Dynamic Pixel調(diào)大些

41.碰撞器之間會相互影響械筛,設(shè)置其Layer有助于物理分類

42.Project Setting中的TixedTimeStep :值越小,物理計算越頻繁

43.我們以前所玩的游戲中飒炎,主人公身上依附著一只寵物如鷹埋哟,主人公移動時,鷹會跟隨著飛動郎汪,主人公移動得快它就飛行跟動得快定欧,始終不會離開主人公,使用Lerp插值函數(shù)就可實現(xiàn)怒竿。

44.Transform中eularAngle的取值范圍是(0砍鸠,360).

45. 更改天空盒可以在lighting設(shè)置中完成

46.通過腳本使用SetActive的注意點:不可以直接由GameObject.Find來設(shè)置可見性,而是應(yīng)該通過GameObject.Find("可見父類物體名").transform.Find("不可見子物體名")來設(shè)置可見性耕驰。還有一種是通過public指定實現(xiàn)爷辱,較為常用。

47.EventSystem.current.currentSelectedGameObject.name 獲取點擊物體的名字

48.通過腳本綁定點擊事件:Button.onClick.AddListener

49.unity中的CPU幀率低了會有一種卡的感覺朦肘,高了會對性能要求高饭弓。適合的是30-60fps

50.兩次點擊退出

```

if (Input.GetKeyDown(KeyCode.Escape))

?? ? ? ?{

? ? ? ? ? ? clickTimes++;

?? ? ? ? ? if (clickTimes == 1) {

? ? i1 = Time.time;

? ? ? ? ? ? }

?? ? ? ? ? ?if (clickTimes == 2)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? i2 = Time.time;

? ? ? ? ? ? ? ? if (i2 - i1 <= 2f)

? ? ? ? ? ? ? ? ? ? Application.Quit();

? ? ? ? ? ? }

? ? ? ? }

```

51.動態(tài)更改材質(zhì) 在MeshRenderer組件下的屬性中

52. 簡單的單例模式:

```

public static Manager instance = null;

void Awake()

? ? {

? ? ? ? if (instance != null)

? ? ? ? ? ? return;

? ? ? ? instance = this;

? ? }

```

53. 線性插值理解

插值有三個參數(shù)(起始,終點媒抠,百分比)弟断。百分比定義**移動步長【(終點 - 起始)*百分比】**。它的應(yīng)用有Mathf.Lerp趴生。Vector,Color下的Lerp函數(shù)本質(zhì)是相同的阀趴』韬玻可以通過Lerp函數(shù)給目標(biāo)值循環(huán)賦值,能實現(xiàn)線性變化刘急。

```

voidUpdate ()

{?

//以幀為變化頻率

?light.intensity=Mathf.Lerp(light.intensity,8f, 0.5f);

//以時間為變化頻率

light.intensity=Mathf.Lerp(light.intensity,8f, 0.5f*Time.deltaTime);

}

```


54.以自身坐標(biāo)做移動棚菊。transform.Translate(Vector3 , Space.Self)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叔汁,隨后出現(xiàn)的幾起案子统求,更是在濱河造成了極大的恐慌,老刑警劉巖据块,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件码邻,死亡現(xiàn)場離奇詭異,居然都是意外死亡另假,警方通過查閱死者的電腦和手機冒滩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浪谴,“玉大人,你說我怎么就攤上這事因苹」冻埽” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵扶檐,是天一觀的道長凶杖。 經(jīng)常有香客問我,道長款筑,這世上最難降的妖魔是什么智蝠? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮奈梳,結(jié)果婚禮上杈湾,老公的妹妹穿的比我還像新娘。我一直安慰自己攘须,他們只是感情好漆撞,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著于宙,像睡著了一般浮驳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捞魁,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天至会,我揣著相機與錄音,去河邊找鬼谱俭。 笑死奉件,一個胖子當(dāng)著我的面吹牛宵蛀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓶蚂,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼糖埋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窃这?” 一聲冷哼從身側(cè)響起瞳别,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杭攻,沒想到半個月后祟敛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡兆解,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年馆铁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锅睛。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡埠巨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出现拒,到底是詐尸還是另有隱情辣垒,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布印蔬,位于F島的核電站勋桶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏侥猬。R本人自食惡果不足惜例驹,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望退唠。 院中可真熱鬧鹃锈,春花似錦、人聲如沸瞧预。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽松蒜。三九已至扔茅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秸苗,已是汗流浹背召娜。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惊楼,地道東北人玖瘸。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓秸讹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雅倒。 傳聞我的和親對象是個殘疾皇子璃诀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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