Unity技術面試題漲姿勢(一)

2021-02-16 泰鬥社區

Let'Go

1、讓一個物體圍繞某一點旋轉,有幾種方法?分別是什麼?

旋轉函數transform.Rotate()來實現。

transform的RotateAround(vector3 postion,vector3 axis,float angle)函數

2、Mesh,Sphere,Box,Capsule,四種碰撞器。請按照性能開銷由小到大進行排序

性能開銷由小到大排序

sphere collider , capsule collider , box collider ,Mesh collider

3、向量的點積,叉積,在遊戲中的應用(分別舉一個例子說明)

通過點積Vector3.Dot,可以計算兩個向量的夾角的。 Vector3.Cross 可以求兩個向量的叉積。

Vector3.Dot(transform.forward, target.position)

返回值為正時,目標在自己的前方,反之在自己的後方

判斷目標在自己的左右方位可以使用下面的方法:

Vector3.Cross(transform.forward, target.position).y
返回值為正時,目標在自己的右方,反之在自己的左方

通過點積可以計算兩個向量的夾角,叉積可以判斷目標在自己的方位。向量單位化後可以在遊戲中用來計算怪物視野張角;玩家視野張角;NPC視野張角等,完成巡邏索敵等一些功能。

voidStart ()

{

float a = 600.0f;

float b = 1.0f - 80.0f /100.0f;

float c = a * b;

int d = (int)c;

Debug.Log (a);

Debug.Log (b);

Debug.Log (c);

Debug.Log (d);

}

變量「d」的輸出結果為多少?為什麼?如果解決?
首先,變量「d」的輸出結果為119。

先解釋為什麼:在程序中精確計算中使用浮點數是非常危險的,儘管C#在浮點數運算時採取了很多措施使得浮點數運算的結果看起來是非常正常的。但實際上如果不清楚浮點數的特性而貿然使用的話(浮點數由於是計算機內部求補運算而進行的,因此可能存在誤差,將造成非常嚴重的隱患。而且在精度損失的時候,不會報告任何的錯誤,也不會有任何的異常產生~


小數多位後容易出現誤差,使用double會看得更多有效數字,但依然會有誤差,最後真正強轉為int的實際上是一個199.9……無限接近於200的數,這個時候,應該改變計算公式。或者把最後的intd = (int)c;改為更高精度的decimal。即可正常。


最後,所有的浮點型變量都存在精度損失的問題!而decimal是一個不折不扣的浮點型,不論它精度有多高,精度損失依然存在!如做大數據的百度,谷歌,財政等,肯定很多時候都要考慮這種問題。

5、如何讓粒子效果顯示在UI前面?(NGUI或UGUI選其一回答)

修改腳本中的RenderQueue值。

使用另外一個攝像機,顯示特效。

修改粒子特效的Shader中的RendererQueue值。

結合其他設置,還可以通過3D空間中的Z軸調整

6、當一個細小的高速物體撞向另一個較大的物體時,會出現什麼情況?如何避免?

穿透(碰撞檢測失敗)
射線檢測
碰撞體變大
FixedUpdate更新時間修改
代碼限制,加大計算量提前計算好下一個位置。

7、Update(),Awake(),Start()的執行順序是?遊戲開始後,分別在何時執行?

Awake——>Start——>Update

腳本自帶函數執行順序如下:將下面腳本掛在任意物體運行即可得到

Awake ->OnEable-> Start ->FixedUpdate-> Update -> LateUpdate ->OnGUI ->Reset -> OnDisable->OnDestroy

8、數列 1,1,2,3,5,8,13... 第 n 位數是多少 ? 用 C# 遞歸算法實現

public int function(intn)

{

if(n == 1 || n == 2)

return 1;

else

return function(n - 1) + function(n - 2);

}

9、當遊戲中需要頻繁創建一個物體對象時,我們需要怎麼做來節省內存?

使用pool對象池。
使用AssetBundle也可以降低一定內存。

10、Unity動態加載資源有幾種方法,分別是什麼?

通過Resources模塊,調用它的load函數:可以直接load並返回某個類型的Object,前提是要把這個資源放在Resource命名的文件夾下,Unity不關有沒有場景引用,都會將其全部打入到安裝包中。


通過bundle的形式:即將資源打成 asset bundle 放在伺服器或本地磁碟,然後使用WWW模塊get 下來,然後從這個bundle中load某個object。


通過AssetDatabase.loadasset :這種方式只在editor範圍內有效,遊戲運行時沒有這個函數,它通常是在開發中調試用的

11、如何實現磁鐵效果?比如酷跑遊戲中,獲得磁鐵道具後,自動吸附附近金幣的效果

獲得磁鐵效果後,主要流程可以分為3步:
首先判斷金幣是否進入磁鐵有效範圍(圓半徑,距離,矩形,collider觸發器等方式都可以)


接著可以使用差值運算方法,Lerp方法或ITween等插件或者類似方法對金幣做一個緩動效果吸附的動畫,
最後判斷動畫到達目標點後(碰撞器,觸發器,計時等)進行銷毀加分等處理即可。


①在玩家身上相同的坐標位置創建一個空的gameobject作為自物體,添加圓形或者球形碰撞器(根據實際要求2D或者3D)來選擇,勾選istrigger作為觸發器,觸發器的範圍即為磁鐵吸附範圍,添加剛體,取消勾選useGravity,gameobject.setActive(false);
②當玩家獲得磁鐵道具後,控制該gameobject.setActive(true);
③在金幣上掛載腳本:

using UnityEngine;

using System.Collections;

 

public class TestForTrigger : MonoBehaviour {

    public bool isAdsorbed = false;

    private GameObject player;

    public  float speed = 1f;

 

    void Awake () {

        player = GameObject.FindGameObjectWithTag("Player");

 

    }

    void Update () {

        if (isAdsorbed) {

            speed += Time.deltaTime;

            transform.Translate(Vector3.Normalize(player.transform.position - this.transform.position) * speed * Time.deltaTime);

        }

    }

    void OnTriggerEnter(Collider other) {

        if (other.tag=="Player") {

            Destroy(this.gameObject);

        }

    }

}

最簡單的是設置Time.timeScale = 0,即可讓遊戲暫停,也可以使用Time.timeScale來做遊戲的 1倍2倍整體加速,但要記住無論Time.timeScale等於多少Update和LateUpdate都會去執行。

所以這兩個方法裡面需要自己用代碼控制。而且如果遊戲暫停以後想在暫停界面上繼續播放一些不受Time.timeScale影響的動畫或者粒子特效之類的,那麼我們就需要用到Time.realtimeSinceStartup去單獨恢復他們,還有聲音部分也需要單獨恢復timeScale。


最大的影響是,在timeScale=0時無法實現暫停菜單的動畫以及各種漂亮的點擊效果。
如果只想暫停某部分,或者為了更多需求和可擴展性,還是需要自己寫個相關的Manager來手動管理遊戲的暫停和開始。

13、Animator Controller中參數類型bool和trigger的區別是什麼?分別在何種情況下使用?

animator的trigger變量只能賦值,是一種觸發變量,觸發之後會自動關閉掉,沒辦法獲取當前狀態。


比如xxxx.animator.settrigger("Attack");在執行這一句時才是true ,但是執行後馬上自動的變為false。適合用在單次動作或者連續不同動作使用,比如三國無雙系列的攻擊和蓄力攻擊。


bool跟trigger不同在於觸發之後會一直執行,而且可以獲取當前狀態。適合用在長時間持續動作,比如行走跑步。

無論碰撞的兩個物體是利用碰撞器,還是利用觸發器,都必須帶有碰撞器組件Collider(Rigidbody2D),其中一個物體還必須帶有Rigidbody(Rigidbody2D)剛體。

人物控制器組件自身包含碰撞,另外一個物體帶有Collider就可以發生碰撞。
或者掛上腳本,自行用代碼去計算碰撞範圍也是可行的,比如AABB。

對象池用於需要被反覆調用的資源,以減少內存消耗和卡頓等現象,FPS遊戲中包括要常被大量複製的對象:子彈,敵人,濺血特效,彈坑以及任何重複出現的對象。

16、Lightmapping是什麼?為什麼要使用?

光照貼圖。使用Lightmapping預先模擬燈光帶來的效果,會帶來性能上的大大提升,手機上更明顯。當然會損失畫面效果,具體還是看項目需求。最簡單的直接在3dmas或maya裡面烘培完貼圖頂點色也行。


與Lightmapping相關的LightProbes也偶爾會使用,
用烘焙出來的假光在動態的物體或角色沒有受光會很突兀,顯得很戳。想要動態物體也有這樣的效果就需要用到LightProbes。

17、在塔防遊戲中,如何讓塔指向進入攻擊範圍的敵人並射擊?請簡述程序流程

先判斷NPC是否進入攻擊範圍(圓半徑,距離,矩形,collider觸發器等)。
根據塔的種類進行不同處理:
單目標攻擊:記錄第一個進入範圍的NPC,使用Lookat或者差值運算讓塔面向目標,然後利用ITween播放子彈動畫,目標為NPC,進行鎖定射擊。

範圍群體目標攻擊:記錄所有在塔範圍的NPC,存入List集合,每次攻擊遍歷集合併重複調用前面提到的單目標攻擊的方法。
指向性飛行道具:用碰撞器或觸發器,直接對NPC進行碰撞檢測即可。

18、Unity中,控制3D人物模型位移方式有幾種?Animator組件的Apply Root Motion的作用是?

1、this.m_transform.position= pos;在Update函數中調用
2、transform.Translate(Vector3direction)
3、CharacterController.Move(),CharacterController.simplemove()
4、Rigidbody.MovePosition();Rigidbody.velocity= Vector3.forward * MoveSpeed; Rigidbody.AddForce();
5、Vector3.MoveToward 當前的地點移向目標

如果勾選了Animator組件中的ApplyRoot Motion選項
角色的Transform將不能通過腳本來直接賦值,而是通過動畫的運動的來改變的
如果我們不勾選,我們就可以用腳本改變角色的Tranform

準備好序列幀動畫的素材,可以是單張也可以是圖集(需要設置Multiple模式在Sprite Editor切割)。


然後使用Animation進行動畫製作,製作好之後設置狀態變化後可以直接在組件上直接使用;或給每張圖片取好命名規範,在代碼中使用Renderer組件進行循環更換也可以實現幀動畫。


或者使用其他第三方插件也可以,但大同小異。
①將幀動畫所需的所有sprite放在一個數組A中,定義一個時間計數器timer和幀frameIndex,通過與設定的每秒的幀數frameCountPersecond進行計算得出當前播放的幀frame,控制場景中的圖片顯示為sprite[]數組中的圖片即可實現幀動畫的播放

int frameIndex = (int)(timer / (1f / frameCountPersecond));

int frame = frameIndex % sprite.length;

spriteRender.sprite = sprites[frame];

②通過將一組排序好的幀動畫的素材直接整組拖入場景中,unity會自動生成一個animation的幀動畫序列,該對象上的animator組件控制幀動畫的播放
③通過animation自定義角色各個狀態的幀動畫,然後通過animator動畫機來自定義設定各個狀態的切換條件來控制各個狀態的動畫的切換

20、對象包含Box Collider 2D組件,且作為trigger使用時,檢測是否有對象進入的函數是?

OnTriggerEnter2D檢測是否有對象進入
OnTriggerStay2D檢測是否有對象在區域內
OnTriggerExit2D檢測是否有對象離開
答:OnTriggerEnter2D() 例如有個play位移拾取金幣,金幣對象就要加上剛體,Box Collider 2D組件,當play進入金幣時,銷毀積分加屬性等。

voidOnTriggerEnter2D (Collider2D collision)

{

if (collision.tag=="Sqian")

{

Destroy(collision.gameObject);

Score += 10;

UpdateScore();

}

}

相關焦點

  • Unity技術面試題100問
    整理了一些Unity常見面試題,分享給大家(泰鬥技術社區)一:什麼是協同程序?
  • Unity面試題部分高頻題目整理匯集
    本文整理轉載了一些unity3d高頻面試題目,希望可以幫助到大家。限於個人水平有限,只附上一些參考答案。
  • [萬字乾貨]Unity遊戲工程師求職面試指南!
    到我寫這篇文章的時候我面試了差不多六、七家公司。這幾家公司按照面試順序分別是:米哈遊、心動、b站、涼屋、網易、騰訊、番糖。最後拿到了一半的offer,包括大廠的offer。鑑於網上的社招面經實在太少,大部分也只是停留在面試題的總結。而面試題這種東西,不同公司不同面試官考的題很可能是不一樣的。
  • 一臉懵逼的你進來漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲姿勢時間:2020-06-22 19:19   來源:親親寶貝   責任編輯:沫朵 川北在線核心提示:原標題:屁話大王是什麼意思什麼梗? 一臉懵逼的你進來漲漲漲漲漲漲姿勢 啥事也憋不住,無論是開心的還是不開心的事,都一定要跟別人說說。
  • 一臉懵逼的小夥伴進來漲漲漲漲漲姿勢
    一臉懵逼的小夥伴進來漲漲漲漲漲姿勢時間:2020-08-14 15:19   來源:咖綠茵   責任編輯:沫朵 川北在線核心提示:原標題:黑羽令什麼意思什麼梗? 一臉懵逼的小夥伴進來漲漲漲漲漲姿勢 最近各大網絡平臺的很多小夥伴都有在討論黑羽令這個詞,相信不少網友看到這個詞也是一臉懵逼,那麼這個詞是什麼意思呢?出自哪裡呢?
  • 一臉懵逼的你進來漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲姿勢時間:2020-05-28 17:28   來源:川北在線整理   責任編輯:沫朵 川北在線核心提示:原標題:尷尬回想什麼意思什麼梗? 一臉懵逼的你進來漲漲漲漲漲漲姿勢 穿著白褲子來姨媽,沒戴眼鏡打錯招呼,以為打電話的人在和自己說話等糗事,總會在腦子裡不自覺的回想一萬遍,想起來就尷尬的頭皮發麻。
  • 一臉懵逼的你進來漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲姿勢時間:2020-05-22 17:08   來源:小雞詞典   責任編輯:沫朵 川北在線核心提示:原標題:蛋白質人什麼意思什麼梗? 一臉懵逼的你進來漲漲漲漲漲漲姿勢 現實中的人類,也就是三次元的世界裡所有的人類統統可以稱呼為蛋白質人蛋白質是組成人體一切細胞、組織的重要成分。
  • 一臉懵逼的你進來漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲姿勢時間:2020-07-16 16:37   來源:親親寶貝   責任編輯:沫朵 川北在線核心提示:原標題:完美受害人是什麼意思什麼梗? 一臉懵逼的你進來漲漲漲漲漲漲姿勢 是指人們希望從各個角度看這個受害人就是一個完全無辜的受害者,不存在任何不合理的、違反日常行為準則、道德規範的行為。
  • 一臉懵逼的你進來漲漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲漲姿勢時間:2020-06-08 17:34   來源:遊俠網   責任編輯:沫朵 川北在線核心提示:原標題:看滿離是什麼意思什麼梗? 一臉懵逼的你進來漲漲漲漲漲漲漲姿勢 看滿離是什麼意思?
  • 一臉蒙蔽的你進來漲漲漲漲漲漲姿勢
    一臉蒙蔽的你進來漲漲漲漲漲漲姿勢時間:2020-08-22 17:11   來源:咖綠茵   責任編輯:沫朵 川北在線核心提示:原標題:抖音yyyut什麼意思什麼梗?一臉蒙蔽的你進來漲漲漲漲漲漲姿勢 抖音作為我們大多數人現在休閒娛樂的方式之一,小夥伴們都喜歡在上面刷視頻,也會經常給我們帶來很多生活的樂趣,或者一些令人詫異的梗,最近抖音裡面大家都在討論的yyy是什麼梗呢?接下來咖綠茵   原標題:抖音yyyut什麼意思什麼梗?
  • 小動作多、開不了口……你的面試刷題姿勢正確嗎?
    2020年軍隊文職面試火熱進行中,有的小夥伴報了培訓班,有的小夥伴選擇自行學習。無論什麼形式都少不了用真題、模擬題進行實景模擬訓練。 今天圖兔就跟大家聊聊「面試刷題的正確姿勢」! 訓練舉止儀表,答題盡展自信 舉止儀表體現在開門、行走、站立、問好、落座、答題、退場的全過程,所以考生在課後訓練時儘量選擇有一定空間的場地,確保能夠做好全過程的動作。
  • 一臉懵逼的你進來漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲姿勢時間:2020-04-21 16:11   來源:小雞詞典   責任編輯:沫朵 川北在線核心提示:原標題:向我開炮什麼意思什麼梗? 一臉懵逼的你進來漲漲漲漲漲漲姿勢 在抖音評論區看到時,是指我要維護我回復的這條評論,你們不能攻擊他,有什麼事情衝著我來,有調侃熱評太搞笑沙雕或者很有道理的意思。
  • 一臉懵逼的你進來漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲姿勢時間:2020-06-29 17:38   來源:禮儀之家   責任編輯:沫朵 川北在線核心提示:原標題:崩潰哄崩潰是什麼意思什麼梗?一臉懵逼的你進來漲漲漲漲漲漲姿勢 崩潰哄崩潰: 明明自己已經很不開心了站在崩潰的邊緣,結果身邊有人崩潰了還得穩住情緒先哄著ta,小心翼翼不把負面情緒表露出來。
  • 一臉懵逼的你進來漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲姿勢時間:2020-09-04 16:05   來源:遊俠網   責任編輯:沫朵 川北在線核心提示:原標題:很有精神什麼意思什麼梗? 一臉懵逼的你進來漲漲漲漲漲姿勢 很有精神什麼梗?
  • Unity Standard Shader 技術分析
    它使用了哪些技術?它又是如何應用這些技術的?事實上這是一篇寫給自己的總結,而不是寫給新人看的教程。所以在這篇文章中並不會去介紹Unity所使用的算法原理,僅僅是講解Unity Standard Shader使用了哪些技術,又是如何應用的。正文我閱讀的Unity Standard Shader的版本是2018.2.12f1。我的結論均以該版本為基礎。
  • 漲姿勢!史上最全學校食堂黑暗料理
    漲姿勢!史上最全學校食堂黑暗料理   漲姿勢!史上最全學校食堂黑暗料理   漲姿勢!史上最全學校食堂黑暗料理   漲姿勢!史上最全學校食堂黑暗料理   漲姿勢!史上最全學校食堂黑暗料理   漲姿勢!
  • 一頭霧水的你進來漲漲漲漲漲漲漲漲姿勢
    一頭霧水的你進來漲漲漲漲漲漲漲漲姿勢時間:2020-03-31 17:21   來源:小雞詞典   責任編輯:沫朵 川北在線核心提示:原標題:夜勤病棟什麼意思什麼梗?一頭霧水的你進來漲漲漲漲漲漲漲漲姿勢 在B站的一些恐怖遊戲解說視頻裡(尤其是夜晚的醫院中發生的恐怖遊戲)看到這個彈幕的雞友們來了嗎,來了就開始了哈,咳咳 是霓虹的重口色情卡通片 注意,是重口那一掛的! 在夜晚時,可愛性感高   原標題:夜勤病棟什麼意思什麼梗?
  • 一臉懵逼的你進來漲漲漲漲漲漲姿勢
    一臉懵逼的你進來漲漲漲漲漲漲姿勢時間:2020-09-01 12:34   來源:521經驗網   責任編輯:沫朵 川北在線核心提示:原標題:卡其脫離太是什麼意思什麼梗?一臉懵逼的你進來漲漲漲漲漲漲姿勢 卡其脫離太其實是之前就有的一個梗了,最近又被很多人提起,是比較 的風評被害曲,原本是挺燃的一首歌,那麼,卡其脫離太是什麼意思什麼梗?出處來源是哪裡?下面小編就來說說。 卡其脫離太   原標題:卡其脫離太是什麼意思什麼梗?
  • Unity面試題精選(2)
    小編整理了一些Unity面試題目,希望可以幫助到你。面試官:抽象類和接口的區別?答:面試官:MeshCollider和其他Collider的一個主要不同點?面試官:Unity3d中的碰撞器和觸發器的區別?答:碰撞器是觸發器的載體,而觸發器只是碰撞器身上的一個屬性。
  • Unity面試題精選(7)
    小編整理了一些Unity面試題目,希望可以幫助到你。面試官:簡述一下對象池,你覺得在FPS裡哪些東西適合使用對象池?面試官:CharacterController和Rigidbody的區別?面試官:簡述prefab的用處?答:在遊戲運行時實例化,prefab相當於一個模板,對你已經有的素材、腳本、參數做一個默認的配置,以便於以後的修改,同時prefab打包的內容簡化了導出的操作,便於團隊的交流。