2019Unity3D開(kāi)發(fā)工程師面試題

面試題總分類

---------------------------------------

|--繼承,封裝,多態(tài),設(shè)計(jì)模式理解?---------|

|--網(wǎng)絡(luò)層級(jí),tcp,udp,http,socket區(qū)別?---|

|--渲染管線,渲染流程,渲染機(jī)制------------|

|--優(yōu)化,cpu,gpu,內(nèi)存,drawcall,fps?-----|

---------------------------------------|

常見(jiàn)題

---------------------C#----------------------

值類型與引用類型區(qū)別?

存儲(chǔ)類型是棧和堆? 速度值類型存儲(chǔ)快 引用慢

簡(jiǎn)述對(duì)繼承的理解?

一個(gè)類繼承另一個(gè)類 可以使用基類的方法和屬性 基類必須加virtual 子類加override

List和ArrayList區(qū)別?

泛型和非泛型

4種訪問(wèn)修飾符的區(qū)別?

public 公共的 protected 自身和子類使用 private 私有的? internal 程序和程序集內(nèi)部

面向?qū)ο笕筇卣鳎?/p>

封裝 繼承 多態(tài)

引用類型的基類?

System.Object

Ref和out區(qū)別?

傳遞引用 出參

接口和抽象類區(qū)別?

多繼承 抽象類不能? 接口不能實(shí)例化 抽象類間接實(shí)例化 接口完全抽象 抽象類部分抽象

String和StringBuilder區(qū)別?

修改的是再開(kāi)辟一個(gè)內(nèi)存空間 stringBuilder是在原有的內(nèi)存空間修改

簡(jiǎn)述常用設(shè)計(jì)原則?

單一 里氏代還 依賴倒轉(zhuǎn) 迪米特 接口隔離 合成復(fù)用 開(kāi)閉原則

簡(jiǎn)述常用設(shè)計(jì)模式?

單例 簡(jiǎn)易工廠 對(duì)象池 觀察者 狀態(tài)機(jī) 外觀

List命名空間?

system.collections.Generic

二叉樹(shù)的前序中序后續(xù)

No

數(shù)組和鏈表區(qū)別?

有序? 長(zhǎng)度固定 類型確定 增刪改查不方便 需要擴(kuò)容? ··鏈表無(wú)序...

線程互斥的方法?()

lock? Monitor 是一種語(yǔ)法糖

軟件設(shè)計(jì)四大特性?

安全 復(fù)用 擴(kuò)展 可測(cè)試

什么是MVC?

模型視圖分離控制器? 是一種設(shè)計(jì)模式

文件流的3種讀寫方式?

StreamReader

Stream.read

StringReader

BinaryaReader

TextReader

JIT和AOT?

justintime? 即時(shí)編譯 c# Java等托管語(yǔ)言 執(zhí)行慢 安裝快 占用內(nèi)存小

aot預(yù)先編譯? c++等? 執(zhí)行快 安裝慢 占用內(nèi)存大

觀察者的設(shè)計(jì)原則?

依賴倒轉(zhuǎn)

常用容器類?

list arriylist hashtable dictionary stack queue array LinkList

數(shù)組和list區(qū)別?

裝箱拆箱 不用指定長(zhǎng)度 自動(dòng)擴(kuò)容

IO的關(guān)鍵字分別有哪些?分別有什么用?

Stream? 流? File 文件? Path 路徑 Directory 文件夾

同步和異步的區(qū)別?

兩方同時(shí)在線 阻塞 等待回復(fù)? 異步 相當(dāng)于發(fā)消息 發(fā)完就可以執(zhí)行其他程序

接口和委托區(qū)別?

接口約束方法 必須實(shí)現(xiàn)? 委托約束參數(shù) 參數(shù)類型必須相同

-------------------unity---------------------

Unity生命周期函數(shù)有哪些?

Awake OnEnable Start Update LateUpdate (FixedUpdate) OnDisable OnDestroy OnApplictionQuit

Unity光源有幾種?

1 平行光 2 點(diǎn)光源 3 聚光燈

Unity動(dòng)畫(huà)有幾種?

關(guān)節(jié)動(dòng)畫(huà)? 骨骼動(dòng)畫(huà) 關(guān)鍵幀動(dòng)畫(huà)

矩陣相乘的意義?

計(jì)算歐拉角 向量

自身坐標(biāo)系和世界坐標(biāo)系區(qū)別?

position localPosition 以自身坐標(biāo)為坐標(biāo)軸 世界原點(diǎn)為坐標(biāo)軸

協(xié)程和線程區(qū)別?

協(xié)程不是線程 unity不支持多線程 在主線程開(kāi)啟一段邏輯來(lái)輔助主線程執(zhí)行 是模擬多線程的一種機(jī)制

異步加載場(chǎng)景的函數(shù)?

using UnityEngine.SceneManagement;//命名空間

SceneManager.LoadSceneAsync(1);//異步加載場(chǎng)景函數(shù)

SceneManager.LoadScene(0);//加載場(chǎng)景

unity增加刪除和獲取組件的方法?

AddConponent ()

Destroy()

GetComponent()

UGUI和GUI的區(qū)別?

可視化 美觀 GUI是腳本控制

編輯器的類放到哪個(gè)文件夾?

Editor

unity兩個(gè)場(chǎng)景之間互相傳值的方法。

DontDestroyOnLoad()

PlayerPrefs

material和SharedMaterial區(qū)別?

修改這個(gè)物體的材質(zhì)? ShredMaterical修改使用這個(gè)材質(zhì)的所有物體

碰撞器和觸發(fā)器區(qū)別?

碰撞有物理效果 觸發(fā)沒(méi)有

什么是DrawCall?

GPU把游戲場(chǎng)景內(nèi)的的模型貼圖光照等信息收集起來(lái)發(fā)送給GPU計(jì)算的過(guò)程稱為一次drawcall

1個(gè)模型帶一個(gè)材質(zhì)單通道shader渲染一次的過(guò)程是1個(gè)drawcall

.Net和Mono?

微軟開(kāi)發(fā)的一個(gè)開(kāi)發(fā)平臺(tái) Mono是.net的開(kāi)元跨平臺(tái)工具

點(diǎn)乘和叉乘?

點(diǎn)乘 計(jì)算角度 叉乘 可以計(jì)算法線

Unity支持的語(yǔ)言?

javascipt,C#,boo

Render,MeshRender和SkinnedMeshRender區(qū)別?

Reader,父類,負(fù)責(zé)渲染

MeshReader,網(wǎng)格渲染器,

SkinReader,蒙皮網(wǎng)格渲染器,每個(gè)模型的骨骼的骨關(guān)節(jié),都有一個(gè)頂點(diǎn),骨骼里有骨骼信息,骨骼可以牽引著蒙皮走

Animator的Layer有什么用?

層級(jí)遮罩 可以上半身播放一個(gè)動(dòng)畫(huà) 下半身播放另一個(gè)動(dòng)畫(huà)

什么是跨平臺(tái)?

直接在其他平臺(tái)上運(yùn)行 不需要修改原代碼

Pingpong和Repeat?

12321 123123

Lerp,Slerp

插值? 圓滑(弧線)插值

動(dòng)態(tài)加載資源的3中方式?

Resourse AssedBoundle WWW

矩陣相乘?(必要條件)

格式相同

獲取input,橫縱軸的方法?

Input.GetAxis("Horizontal")"Vertical"

LOD和MippingMap?

模型 貼圖 近大遠(yuǎn)?。ㄇ逦暮湍:模?/p>

序列化和反序列化?

protobuf? json? xml

隱藏Inspector字段的方法?

HideInInspector

AssetBundle和Resources區(qū)別?

Resources的方式需要把所有資源全部打入安裝包

AssetBundle是打成一個(gè)資源壓縮包,里面包含了一堆資源,把資源打成幾個(gè)小的bundle,用哪個(gè)就load哪個(gè),

旋轉(zhuǎn)使用矩陣,四元數(shù),歐拉角的優(yōu)缺點(diǎn)?

矩陣 優(yōu)點(diǎn)是 可以使任意方向 缺點(diǎn)是運(yùn)算量大,

四元數(shù),優(yōu)點(diǎn)是可以避免萬(wàn)向鎖,可以平滑插值旋轉(zhuǎn)

歐拉角 優(yōu)點(diǎn)是容易理解,缺點(diǎn)是有萬(wàn)向鎖

什么會(huì)導(dǎo)致unity內(nèi)存泄漏

網(wǎng)絡(luò)5層協(xié)議?

應(yīng)用層 傳輸層 網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層 實(shí)體層

狀態(tài)機(jī)和行為樹(shù)的區(qū)別?

狀態(tài)機(jī)(FSM):

數(shù)學(xué)連通圖

狀態(tài)之間需要特定的條件跳轉(zhuǎn)

節(jié)點(diǎn)不容易復(fù)用,

狀態(tài)節(jié)點(diǎn)增加會(huì)增加維護(hù)成本

同一時(shí)刻只有一個(gè)節(jié)點(diǎn)在執(zhí)行

行為樹(shù)(BT)

樹(shù)形結(jié)構(gòu)

高度模塊化行為,行為之間的跳轉(zhuǎn)由父節(jié)點(diǎn)來(lái)決定,復(fù)用性好

適合做大型的AI

什么是光照貼圖?有什么意義?

烘焙 避免使用實(shí)時(shí)光

光照探針?什么意義?

補(bǔ)強(qiáng)動(dòng)態(tài)物體的動(dòng)態(tài)的效果

--------------------優(yōu)化------------------------

優(yōu)化FPS的方法?

鎖幀 Application.targetFrameRote=30;

unity優(yōu)化內(nèi)存?

壓縮自帶類庫(kù),合并材質(zhì),合并圖集,使用對(duì)象池,

unity中優(yōu)化CPU?

update中避免使用迭代器,遮擋剔除,視錐體剔除,MipMap,LOD,烘焙光代替實(shí)時(shí)光,警惕透明物體(透明物體是從后往前渲染的)

unity中優(yōu)化GPU?動(dòng)靜態(tài)處理

GC的產(chǎn)生原因和避免?

Unity減少GC的方式?

unity中怎么手動(dòng)GC?

-----------------Network---------------------

網(wǎng)絡(luò)數(shù)據(jù)的序列化方法有哪些?有什么區(qū)別?

。proto轉(zhuǎn)。cs文件,流程?

網(wǎng)絡(luò)5層協(xié)議?

Http的特點(diǎn)?

TCP和UDP區(qū)別?

TCP是面向連接,需要三次握手才能連接成功

UDP不是面向連接,發(fā)送完消息就斷了

http,socket,tcp區(qū)別?

粘包產(chǎn)生原因,如何解決?

要發(fā)送的數(shù)據(jù)大于TCP發(fā)送緩沖區(qū)剩余空間大小,將會(huì)發(fā)生拆包。

待發(fā)送數(shù)據(jù)大于MSS (最大報(bào)文長(zhǎng)度),TCP在傳輸前將進(jìn)行拆包。

要發(fā)送的數(shù)據(jù)小于TCP發(fā)送緩沖區(qū)的大小,TCP將多次寫入緩存區(qū)的數(shù)據(jù)一次發(fā)送出去

接收數(shù)據(jù)端的應(yīng)用層沒(méi)有及時(shí)讀取接收緩存區(qū)中的數(shù)據(jù),將發(fā)生粘包

-----------------Lua---------------------

lua基本數(shù)據(jù)類型有哪些?

lua中什么是元表?

lua中.和:有什么區(qū)別?

lua中如何實(shí)現(xiàn)面向?qū)ο螅?/p>

pairs和ipairs有什么區(qū)別?

dofile和require有什么區(qū)別?

ulua熱更新的原理?

熱更新的流程?

cstolua的原理和優(yōu)點(diǎn)?

pureMVC框架的結(jié)構(gòu)?

pbc的使用流程?

ulua中如何優(yōu)化?

--------------------shader---------------------

什么是渲染管線?

shader中的數(shù)值類型有哪些?

Lambert和BlinnPong的計(jì)算公式?

shaderLab的種類?分別什么區(qū)別?

頂點(diǎn)函數(shù)中常用哪些語(yǔ)義?分別代表什么含義?

AlphaBlend代表什么階段?有哪些常見(jiàn)混合方式?

ShaderForge中Fresnel節(jié)點(diǎn)代表什么含義?

RenderType的Opaque和Transparent有什么區(qū)別?

RenderQueue中有哪些參數(shù)?

shader中Fallback什么意思?

------------------cocos2dx & C++-------------------

NULL和nullptr的區(qū)別?

虛繼承的意義?

new,delete,malloc,free的區(qū)別?

虛函數(shù)和純虛函數(shù)有什么區(qū)別?

子類析構(gòu)是需要手動(dòng)調(diào)用父類的析構(gòu)嗎?

什么是引用?什么是指針?有什么區(qū)別?

將引用作為函數(shù)返回值的好處?

C++是不是類型安全的

宏定義和const常量有什么區(qū)別?

數(shù)組和指針的區(qū)別?

復(fù)雜聲明void*(*(*fp1)(int))[10]代表什么含義?

cocos命令有什么用?請(qǐng)寫出創(chuàng)建工程的命令

cocos2dx中場(chǎng)景圖的結(jié)構(gòu)和遍歷方式

cocos2dx使用圖片和圖集的區(qū)別?

cocos2dx中action動(dòng)作中,to和by的區(qū)別?

cocos2dx中獲得鼠標(biāo)點(diǎn)擊事件的方法?

cocos2dx中開(kāi)啟update的方法

cocos2dx中如何判斷鼠標(biāo)點(diǎn)擊了圖片?

-----------------cocoscreator & JS--------------------

js的基本數(shù)據(jù)類型有哪些?

js的var和let區(qū)別?

js的use strict的用法有什么用?

js的變量提升指什么?

js繼承使用哪個(gè)關(guān)鍵字?

js中require和export的作用?

typeof和instanceof的區(qū)別?

cc.Class 聲明有什么作用?

cc中如何聲明數(shù)組?

cc中如何獲取自身其他組件?

cc中如何查找自己的孩子?

cc的生命周期有哪些?

cc中如何銷毀節(jié)點(diǎn)?

cc中常駐節(jié)點(diǎn)有什么用?怎么設(shè)置?

cc中如何動(dòng)態(tài)加載資源?

cc中如何發(fā)射和監(jiān)聽(tīng)事件?

cc中如何判斷兩個(gè)精靈發(fā)生碰撞?

腳本重構(gòu) 對(duì)腳本的優(yōu)化

菲涅爾 ViewDic和NormalDic點(diǎn)乘后一減? 跟顏色相乘

將Lua邏輯腳本寫到Lua里面

結(jié)構(gòu)體和類的區(qū)別

結(jié)構(gòu)體是值類型 結(jié)構(gòu)體只能聲明成員,不能讓成員初始化

結(jié)構(gòu)體沒(méi)有析構(gòu)函數(shù) 聲明構(gòu)造函數(shù)時(shí)必須加一個(gè)本類的變量作為參數(shù)

class是引用類型

--------------打包AB包-------------------------

第一種方式

首先把需要打包的物體設(shè)為預(yù)設(shè)物,把AsststBundle標(biāo)簽名字改為XX.unitry3d

在編輯器腳本下現(xiàn)找到StreamingAsstesPath路徑,

看是否存在該路徑,如果存在,就把該文件夾Delete掉,在重新創(chuàng)建該SteamingAssets文件夾

使用BuildPipeline.BuildAssetBundles(path,0,BuildTarget.StandaloneWindows64);打包資源

第二種方式

引入Luaframework框架,在Packager中添加打包路徑,然后點(diǎn)擊編輯器腳本生成Wrap文件

--------------什么是粘包--------------------------

只有TCP才有粘包現(xiàn)象

粘包是: TCP發(fā)送的時(shí)候是以流的形式發(fā)送的,所以發(fā)送的時(shí)候把多個(gè)包存儲(chǔ)在一個(gè)連續(xù)的緩存中,而接收方不知道每個(gè)包的接收邊緣,所以估算大小讀取,所以會(huì)產(chǎn)生粘包和半包

--------------粘包處理--------------------------

先把收到的數(shù)據(jù)存儲(chǔ)到內(nèi)存流里

可以先定義一個(gè)int類型的lengthCount=4的值,表示每次讀取數(shù)據(jù)的長(zhǎng)度

在while循環(huán)中進(jìn)行讀取數(shù)據(jù),

先把讀取數(shù)據(jù)的長(zhǎng)度放在內(nèi)存流的開(kāi)頭,如果數(shù)據(jù)的長(zhǎng)度不足一個(gè)int的長(zhǎng)度,

就把剩下的字節(jié)全部一次讀取,放到內(nèi)存流的最后

這樣處理就可以通過(guò)先讀取最前面的數(shù)據(jù)長(zhǎng)度進(jìn)行判斷,避免粘包半包的產(chǎn)生

首先聲明MS內(nèi)存流把收到的信息存到里面

int count=4;

while(MS剩余的字節(jié)>count)

{

? 聲明一個(gè)ms內(nèi)存流用于存儲(chǔ)每次從MS中讀取的字節(jié)流

? if并把指向當(dāng)前位置的指針前移相應(yīng)的字節(jié)

? else字符流長(zhǎng)度不夠,直接一次全部讀完放到ms的最后,跳出循環(huán),等待下次讀取

}

MS的剩余字節(jié)判斷是用MS的字節(jié)長(zhǎng)度減MS的指針位置得到的

--------------Lua和C#是怎么進(jìn)行交互的--------------

C#調(diào)用Lua是通過(guò)LuaInterface進(jìn)行交互的

Lua調(diào)用C#是通過(guò)LuaFunction綁定回調(diào)

--------------網(wǎng)絡(luò)連接--------------------------

一般使用Socket基于TcpClient進(jìn)行連接,服務(wù)器開(kāi)啟監(jiān)聽(tīng),開(kāi)啟異步讀取客戶端連接

-----------------------------------------------

四元數(shù)、歐拉角、矩陣的區(qū)別

四元數(shù)就是表示一個(gè)3D物體的旋轉(zhuǎn),避免萬(wàn)向鎖 增量旋轉(zhuǎn)

歐拉角

---------------斷線重連---------------------------心跳包? 輪訊

客戶端每隔一定時(shí)間間隔發(fā)送一次心跳包,如果客戶端成功發(fā)送,但是長(zhǎng)時(shí)間未接到服務(wù)器的

回應(yīng),則認(rèn)為連接已經(jīng)中斷,如果服務(wù)器沒(méi)有接收到客戶端的請(qǐng)求,則可以認(rèn)為客戶端已經(jīng)離線

如果服務(wù)器可以接收到客戶端發(fā)來(lái)的心跳包,則可以重新連接

有三種方式:

1.靜默重連:就是斷線時(shí)用戶不知道,可以應(yīng)付短暫的網(wǎng)絡(luò)中斷

2.顯式重連:在靜默重連一定次數(shù),仍然無(wú)法連接成功,此時(shí)需要彈出提示框,中斷游戲流程,告知用戶當(dāng)前網(wǎng)絡(luò)環(huán)境較差,引導(dǎo)用戶在網(wǎng)絡(luò)較好時(shí)嘗試連接

3.服務(wù)器故障重連.

---------------常用的數(shù)據(jù)結(jié)構(gòu)----------------

---------------網(wǎng)絡(luò)連接底層是怎么實(shí)現(xiàn)的

---------------如何加載AB包

---------------什么是外觀模式

---------------MVC

---------------Json和XML的區(qū)別

生命周期

Update和FixedUpdate

js,let和var? let是塊級(jí)作用域是局部變量聲明,而且無(wú)法修改? var定義的變量可以修改

js,數(shù)據(jù)類型? 值類型String Number Symbol null Undefind? 引用function Object Array

lua數(shù)據(jù)類型 string local Number boolen function table threed nil

lua和C#交互 Luainterface

C++刪除對(duì)象 delete

C++什么是拷貝構(gòu)造函數(shù) 是一種特殊的構(gòu)造函數(shù),函數(shù)名稱必須和類名稱一致,它必須的一個(gè)參數(shù)是本類型的一? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 個(gè)引用變量

unity cpu優(yōu)化? LOD Mipmap 遮擋剔除 視錐體剔除

SQL刪除語(yǔ)句 Delete form 表名 where username = ""

添加:insert into 表名 values

改update 表名 set id="" where usrename=""

查select * from 表名

NGUI 是插件panel是容器 點(diǎn)擊事件是碰撞檢測(cè) 有多個(gè)錨點(diǎn) 3DRoot調(diào)整3D 渲染層級(jí)是Depth 自帶Dotween

狀態(tài)模式 數(shù)學(xué)連通圖 符合人的思維,容易理解 同一時(shí)刻只有一個(gè)狀態(tài)執(zhí)行 隨著節(jié)點(diǎn)的增加增加維護(hù)成本

BeahaviaC 選擇 序列

邊緣發(fā)光 菲尼爾近似式

張世杰 2019/4/24 17:31:22

狀態(tài)機(jī)和行為樹(shù) 狀態(tài)機(jī)的標(biāo)準(zhǔn)格式是枚舉Update 增加狀態(tài)增加維護(hù)成本 數(shù)學(xué)流通圖 符合人的思維容易理解

? ? ? ? ? ? ? ? ? ? ? ? 行為樹(shù)是第三方插件 可視化 樹(shù)形結(jié)構(gòu) 高度模塊化 適合做大型AI

優(yōu)化內(nèi)存? 壓縮自帶類庫(kù) 合并圖集 合并材質(zhì) 合并紋理 使用對(duì)象池機(jī)制

熱更新機(jī)制 Luaframwork 先生成wrap文件 AB包 檢測(cè)md5 如果有文件的md5變化 就把該文件刪掉 重新加載

MySQL、SQLite MySQL是用來(lái)做服務(wù)器開(kāi)發(fā)的 SQLite用來(lái)做客戶端開(kāi)發(fā)的

xml,json,protobuf 序列化后大小比json protobuf小 靈活 proto文件轉(zhuǎn)cs文件 json是把類序列化成json

shader屬性

設(shè)計(jì)模式 單例模式 對(duì)象池模式 外觀模式 觀察者模式 簡(jiǎn)單工廠模式 開(kāi)發(fā)者模式 狀態(tài)機(jī)模式

NGUI和UGUI NGUI是插件 panel是容器 自帶Dotween 需要碰撞進(jìn)行射線檢測(cè) 渲染層級(jí)是Dephe 有多個(gè)錨點(diǎn)

? ? ? ? ? ? ? ? ? ? ? UGUI是Unity原生 渲染層級(jí)是調(diào)層級(jí)面板 不需要碰撞盒

內(nèi)存優(yōu)化 壓縮自帶類庫(kù) 合并圖集 合并材質(zhì) 合并紋理 使用對(duì)象池機(jī)制 減少模型的骨骼和面片數(shù)量

張世杰 2019/4/24 17:31:34

狀態(tài)機(jī)和行為樹(shù) 狀態(tài)機(jī):數(shù)學(xué)連通圖 符合人的思維容易理解 增加狀態(tài)增加維護(hù)成本 標(biāo)配是枚舉和狀態(tài)方法

? ? ? ? ? ? ? ? ? ? ? ? 行為樹(shù):高度模塊化 樹(shù)形結(jié)構(gòu) 適合做大型AI 可視化

優(yōu)化內(nèi)存? 壓縮自帶類庫(kù) 合并材質(zhì)紋理圖集 對(duì)象池 減少骨骼和面片

熱更新機(jī)制 引入Luaframwork框架 生成wrap文件 打AB包 把StreamingAssets放到網(wǎng)絡(luò)文件服務(wù)器

? ? ? ? ? ? ? ? 運(yùn)行的時(shí)候檢查每個(gè)文件的md5是否和網(wǎng)絡(luò)文件服務(wù)器一致如果不一致刪除該文件 從網(wǎng)絡(luò)

? ? ? ? ? ? ? ? 文件服務(wù)器重新加載?

MySQL、SQLite MySQL是服務(wù)器開(kāi)發(fā)用的 SQLite是客戶端開(kāi)發(fā)用的

xml,json,protobuf json是把類序列化成json格式的string 可以直接發(fā)送 靈活

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? protobuf是第三方插件 用的時(shí)候是把類轉(zhuǎn)成proto類

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? xml是把數(shù)據(jù)轉(zhuǎn)化成xml格式進(jìn)行讀取發(fā)送

shader屬性

設(shè)計(jì)模式? 單例模式 對(duì)象池模式 觀察者模式 狀態(tài)機(jī)模式 外觀模式 開(kāi)發(fā)者模式

NGUI和UGUI NGUI是插件 panel是容器 渲染層級(jí)是通過(guò)Dephe深度 按鈕需要碰撞盒才能檢測(cè)點(diǎn)擊事件 自帶DoTween 有多個(gè)錨點(diǎn)

內(nèi)存優(yōu)化

高復(fù)發(fā) 多協(xié)作

pbc是云峰大神寫的protobuf解析庫(kù)? protoc.exe -o 目標(biāo)文件 源文件

JS是怎么繼承的? estends繼承

. 和 : 的區(qū)別? .不是面向?qū)ο?調(diào)用C#靜態(tài)時(shí)? :是面向?qū)ο笠隿lass 調(diào)用C#自身方法

嚴(yán)格模式 user strict 指令在JavaScript 不能使用未定義變量 體現(xiàn)代碼的安全性

cc的生命周期 onload OnEnable start update lateUpdate OnDisable OnDestroy

面試題總分類

---------------------------------------

|--繼承,封裝,多態(tài),設(shè)計(jì)模式理解?---------|

|--網(wǎng)絡(luò)層級(jí),tcp,udp,http,socket區(qū)別?---|

|--渲染管線,渲染流程,渲染機(jī)制------------|

|--優(yōu)化,cpu,gpu,內(nèi)存,drawcall,fps?-----|

---------------------------------------|

常見(jiàn)題

---------------------C#----------------------

值類型與引用類型區(qū)別?

值類型存儲(chǔ)在內(nèi)存棧里,存儲(chǔ)速度快,存的是具體數(shù)據(jù),內(nèi)存用完自動(dòng)釋放,引用類型存儲(chǔ)在內(nèi)存堆里,存儲(chǔ)速度慢,存的是地址或引用,內(nèi)存用完由 .Net 的 GC 釋放

簡(jiǎn)述對(duì)繼承的理解?

多個(gè)子類抽象出共有的方法或?qū)傩苑湃敫割?,繼承提高了代碼的重用性,增強(qiáng)軟件的可維護(hù)性,符合開(kāi)閉原則

List和ArrayList區(qū)別?

arraylist 不帶泛型,數(shù)據(jù)類型丟失,需要裝箱拆箱, list 帶泛型,數(shù)據(jù)類型保存,不需要裝箱拆箱

4種訪問(wèn)修飾符的區(qū)別?

private 僅對(duì)奔雷公開(kāi)

public 對(duì)任何類公開(kāi),沒(méi)有訪問(wèn)限制

protected 對(duì)本類和它的子類公開(kāi)

internal 同一個(gè)程序集可以訪問(wèn)

protected 和 internal 同一個(gè)程序集內(nèi)部以及不同程序集但存在繼承關(guān)系的可以引用

面向?qū)ο笕筇卣鳎?/p>

繼承 提高代碼重用性,增強(qiáng)軟件可維護(hù)性,符合開(kāi)閉原則

封裝 將數(shù)據(jù)和行為相結(jié)合,增強(qiáng)代碼安全性

多態(tài) 重載和重寫

引用類型的基類?

System.Object

Ref和out區(qū)別?

都是通過(guò)引用傳遞參數(shù),和 C 中的指針類似,使用 ref 傳遞參數(shù),參數(shù)必須初始化,使用 out 必須在方法中對(duì)其完成初始化,out適合用在需要 return 多個(gè)返回值的地方,ref 用在需要被調(diào)用的方法修改調(diào)用者的引用的時(shí)候

接口和抽象類區(qū)別?

接口是對(duì)動(dòng)作的抽象,抽象類是對(duì)根源的抽象。

抽象類不能創(chuàng)建實(shí)例,只能作為父類被繼承,抽象方法只作聲明,不實(shí)現(xiàn),抽象類有構(gòu)造函數(shù),可以包含普通成員變量,靜態(tài)方法,只能單繼承

接口也不能創(chuàng)建實(shí)例,只能包含方法聲明,不能包含常量,字段,構(gòu)造,析構(gòu),靜態(tài)成員,可以多繼承

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類,

相同點(diǎn):派生類必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法

String和StringBuilder區(qū)別?

string 具有不可變性,每次對(duì) string 對(duì)象進(jìn)行修改其實(shí)都是創(chuàng)建另一個(gè) string 類的對(duì)象,所以當(dāng)需要頻繁 的對(duì) string對(duì)象 修改時(shí)建議使用 stringBuilder,stringbuilder 的原理是先在內(nèi)存中開(kāi)辟一定大小的內(nèi)存空間,如果內(nèi)存不夠則會(huì)對(duì)次內(nèi)存空間進(jìn)行擴(kuò)充而不是重新創(chuàng)建一個(gè)對(duì)象,不會(huì)造成過(guò)多的內(nèi)存浪費(fèi)

string 主要用于公用 API ,通用性好,用途廣泛,讀取性能高,占用內(nèi)存小,stringbilder 主要用于拼接 string 修改性高,不過(guò)現(xiàn)在的編譯器已經(jīng)把 string 的 + 操作優(yōu)化成 stringbuilder 了,所以一般用 string 就可以了

string 是不可變的,所以天然線程同步,stringbuilder 可變,非線程同步

簡(jiǎn)述常用設(shè)計(jì)原則?

單一職責(zé):一個(gè)對(duì)象應(yīng)該只包含單一的職責(zé),只干一件事,高內(nèi)聚

里氏代換原則:所有引用基類的地方能透明的使用子類

依賴倒轉(zhuǎn)原則:抽象不依賴于細(xì)節(jié),細(xì)節(jié)依賴于抽象

接口隔離原則:接口不應(yīng)該太大或太小

迪米特法則:最少知識(shí)原則,低耦合

合成復(fù)用原則:優(yōu)先使用對(duì)象組合,而不是繼承來(lái)達(dá)到復(fù)用的目的

開(kāi)閉原則:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉

簡(jiǎn)述常用設(shè)計(jì)模式?

單例模式:全局唯一,靜態(tài)不銷毀,可以直接訪問(wèn)不需要實(shí)例化

簡(jiǎn)單工廠模式:由一個(gè)工廠對(duì)象決定創(chuàng)建哪一個(gè)對(duì)象

觀察者模式:當(dāng)一個(gè)對(duì)象發(fā)生變化時(shí)會(huì)自動(dòng)通知它的依賴對(duì)象 實(shí)現(xiàn)事件處理系統(tǒng)

狀態(tài)模式:類的行為基于狀態(tài)改變,需要狀態(tài)跳轉(zhuǎn)(有限狀態(tài)機(jī))

外觀模式:隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以訪問(wèn)系統(tǒng)的接口

命令模式:請(qǐng)求以命令的形式包裹在對(duì)象中并傳給調(diào)用對(duì)象

代理模式:一個(gè)類代表另一個(gè)類的功能,為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)

List命名空間?

System.Collections.Generic

二叉樹(shù)的前序中序后序

前序遍歷:先訪問(wèn)根節(jié)點(diǎn),在訪問(wèn)左節(jié)點(diǎn),在訪問(wèn)右節(jié)點(diǎn)

中序遍歷:先訪問(wèn)左節(jié)點(diǎn),在訪問(wèn)根節(jié)點(diǎn),在訪問(wèn)右節(jié)點(diǎn)

后序遍歷:先訪問(wèn)左節(jié)點(diǎn),在訪問(wèn)右節(jié)點(diǎn),在訪問(wèn)根節(jié)點(diǎn)

數(shù)組和鏈表區(qū)別?

鏈表是鏈?zhǔn)降拇鎯?chǔ)結(jié)構(gòu),數(shù)組是順序的存儲(chǔ)結(jié)構(gòu)

數(shù)組必須事先定義固定的長(zhǎng)度(元素個(gè)數(shù)),不能適應(yīng)數(shù)據(jù)動(dòng)態(tài)的增減的情況,可以根據(jù)下標(biāo)直接存取,在棧中分配空間,自由度小

鏈表動(dòng)態(tài)的進(jìn)行存儲(chǔ)分配,可以方便的插入刪除數(shù)據(jù)項(xiàng),必須根據(jù) next 指針找到下一個(gè)元素,在堆中分配空間,自由度大但是申請(qǐng)管理比較麻煩

如果需要快速訪問(wèn)數(shù)據(jù),很少或不插入刪除元素就應(yīng)該用數(shù)組,如果需要經(jīng)常插入和刪除元素就需要用鏈表

線程互斥的方法?()

lock 語(yǔ)法糖

Monitor

Mutex

軟件設(shè)計(jì)四大特性?

可維護(hù)性 可復(fù)用性 可測(cè)試性 安全性

什么是MVC?

模型視圖控制器,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼

文件流的3種讀寫方式?

BinaryReader? BinaryWriter

StringReader? StringWriter

StreamReader? StreamWriter

TextReader? ? TextWriter

JIT和AOT?

jit 實(shí)時(shí)編譯(c# java) 執(zhí)行慢,安裝快,占空間小

aot 預(yù)先編譯(c++ c)? 執(zhí)行快,安裝慢,占內(nèi)存外存大

觀察者的設(shè)計(jì)原則?

依賴倒轉(zhuǎn)原則(定義對(duì)象間的一種一對(duì)多的依賴關(guān)系)

常用容器類?

Stack 棧,先進(jìn)后出

Queue 隊(duì)列,先進(jìn)先出

List 列表,訪問(wèn)快,修改慢

ArrayList 類似于List 使用object 會(huì)引起裝箱拆箱,性能不足

Dictionary/HashTable 字典/散列表,查詢效率高,占內(nèi)存大

數(shù)組和list區(qū)別?

數(shù)組在內(nèi)存中連續(xù)存儲(chǔ),索引速度非常快,賦值和修改元素也很簡(jiǎn)單,但是在數(shù)組的兩個(gè)數(shù)據(jù)間插入數(shù)據(jù)很麻煩,而且聲明數(shù)組時(shí)必須指定數(shù)組的長(zhǎng)度,過(guò)長(zhǎng)會(huì)造成內(nèi)存浪費(fèi),過(guò)短會(huì)造成數(shù)據(jù)溢出

list 在聲明時(shí)需要指定集合內(nèi)數(shù)據(jù)的對(duì)象類型,對(duì)象的大小是按照其中存儲(chǔ)的數(shù)據(jù)來(lái)動(dòng)態(tài)擴(kuò)充與收縮,聲明是不需要指定長(zhǎng)度

IO的關(guān)鍵字分別有哪些?分別有什么用?

Directory 、 Path 、 File

同步和異步的區(qū)別?

同步時(shí)單線程,阻塞式

異步時(shí)多線程,同時(shí)運(yùn)行多個(gè)線程

接口和委托區(qū)別?

接口是約束類的應(yīng)該具備的功能集合,使類從千變?nèi)f化的具體邏輯中解脫出來(lái),便于類的管理和擴(kuò)展,同時(shí)又合理解決了類的單繼承問(wèn)題。

約束方法集合的一個(gè)類,可以便捷的使用委托對(duì)這個(gè)方法集合進(jìn)行操作。

在以下情況中使用接口:無(wú)法使用繼承的場(chǎng)合,完全抽象的場(chǎng)合,多人協(xié)作的場(chǎng)合

在以下情況中使用委托:多用于事件處理中

-------------------unity---------------------

Unity生命周期函數(shù)有哪些?

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

Unity光源有幾種?

平行光、聚光燈、點(diǎn)光源、區(qū)域光源

Unity動(dòng)畫(huà)有幾種?

關(guān)節(jié)動(dòng)畫(huà)

單一網(wǎng)格模型動(dòng)畫(huà)

骨骼動(dòng)畫(huà)

矩陣相乘的意義?

用于表示線性變換:旋轉(zhuǎn),縮放,投影,平移,仿射

自身坐標(biāo)系和世界坐標(biāo)系區(qū)別?

localposition 自身坐標(biāo)系是自身的位置,相對(duì)于父級(jí)的變換的位置

position 在世界坐標(biāo)系 transform 的位置

協(xié)程和線程區(qū)別?

多線程程序同時(shí)運(yùn)行多個(gè)線程,除主線程之外的線程無(wú)法訪問(wèn) Unity3D 的對(duì)象,組件,方法

協(xié)程,就是當(dāng)你在 StartCoroutine 的函數(shù)體里處理一段代碼時(shí),利用 yield 語(yǔ)句等待執(zhí)行結(jié)果,這期間不影響主程序的繼續(xù)執(zhí)行,可以協(xié)同工作(迭代器實(shí)現(xiàn)的)

異步加載場(chǎng)景的函數(shù)?

LoadLevelAsync

unity增加刪除和獲取組件的方法?

AddComponent 、 Destroy 、 GetComponent

UGUI 、GUI 和 NGUI 區(qū)別?

UGUI 是原生的,NGUI 是第三方插件

UGUI 渲染層級(jí)靠 Hierarchy 位置,NGUI 靠 Depth 修改

UGUI 不需要添加碰撞 NGUI是射線檢測(cè),需要添加碰撞

UGUI 沒(méi)有tween NGUI 自帶tween 插件

UGUI 的 Panel 是 Image NGUI 的 Panel 是容器與mask(遮罩)

UGUI 可以用散圖 NGUI 得自己手動(dòng)打圖集,只能用圖集里的圖片

UGUI 靠 camera 和 world 做3D NGUI 靠 2DRoot 和 3DRoot 做3D

NGUI 錨點(diǎn)可以有多個(gè)

GUI 運(yùn)行時(shí)顯示,在unity腳本周期 OnGUI 里調(diào)用,UGUI 所見(jiàn)即所得,使用了畫(huà)布和事件系統(tǒng)

Unity 重要的文件夾

Edior? ? ? ? ? ? 放編輯器腳本

Resources? ? ? ? 動(dòng)態(tài)加載資源的文件夾

Plugins? ? ? ? ? 放插件相關(guān)

StreamingAssets? 資源文件夾,放 AssetsBundle包

unity兩個(gè)場(chǎng)景之間互相傳值的方法。

PlayerPrefs 存檔 、 DotDestroyOnLoad 不銷毀

material和SharedMaterial區(qū)別?

material 修改渲染器材質(zhì),shardmaterial 修改工程中的所有使用這個(gè)材質(zhì)的外觀

碰撞器和觸發(fā)器區(qū)別?

collider 碰撞器有碰撞效果,可以調(diào)用 OnCollisionStay/Enter/Exit函數(shù)

trigger? 觸發(fā)器沒(méi)有碰撞效果,可以調(diào)用OnTriggerStay/Enter/Exit函數(shù)

什么是DrawCall?

CPU調(diào)用圖形編程接口,1個(gè)模型帶一個(gè)材質(zhì)單通道shader渲染一次的過(guò)程是1個(gè)drawcall

.Net和Mono?

.Net是一個(gè)語(yǔ)言平臺(tái),Mono為 .Net 提供集成開(kāi)發(fā)環(huán)境,集成并實(shí)現(xiàn)了 .Net 的編譯器、CLR 和基礎(chǔ)類庫(kù),使得 .Net 既可以運(yùn)行在 windows 也可以運(yùn)行于 Linux 、Unix 、 Mac 、 OS 等

點(diǎn)乘和叉乘?

點(diǎn)乘描述了兩個(gè)向量的相似程度,結(jié)果越大兩個(gè)向量越相似,還可以表示投影

叉乘得到的向量垂直于原來(lái)的兩個(gè)向量

Unity支持的語(yǔ)言?

C# 、 JS 、 Boo

Render,MeshRender和SkinnedMeshRender區(qū)別?

Render 是 MeshRender 和 SkinnedMeshRender 的 父類,負(fù)責(zé)渲染的基類,MehRender 是網(wǎng)格渲染器,SkinnedMeshRender 是蒙皮網(wǎng)格渲染器,用于帶g骨骼動(dòng)畫(huà)的模型身上

Animator的Layer有什么用?

動(dòng)畫(huà)層作為一個(gè)具有層級(jí)動(dòng)畫(huà)編輯概念的工具, 可以用來(lái)制作和處理任何類型的動(dòng)畫(huà)

什么是跨平臺(tái)?

在一個(gè)平臺(tái)上開(kāi)發(fā)的軟件或程序可以在其他平臺(tái)上正常運(yùn)行顯示

Pingpong和Repeat?

Mathf.Pingpong 讓數(shù)值 t 在 0 到 length 之間往返 t 值永遠(yuǎn)不會(huì)大于length的值,也永遠(yuǎn)不會(huì)小于0。

Mathf.Repeat? 循環(huán)數(shù)值 t,0到 length之間。t值永遠(yuǎn)不會(huì)大于length的值也永遠(yuǎn)不會(huì)小于0。

Lerp,Slerp

Mathf.Lerp? 插值 數(shù)值 t 在0 到1之間

Mathf.Slerp? 平滑插值 t 在0 到1之間

動(dòng)態(tài)加載資源的3種方式?

Resources

WWW (AssetBundles)

AssetDatabase.loadasset

矩陣相乘?(必要條件)

第一個(gè)矩陣的行數(shù)和第二個(gè)矩陣的列數(shù)必須相同

獲取input,橫縱軸的方法?

Horizontal 、 Vertical

LOD和MippingMap?

Lod: 多層次細(xì)節(jié),根據(jù)模型所處的環(huán)境決定渲染資源分配,提高渲染效率

優(yōu)點(diǎn):可以根據(jù)距離動(dòng)態(tài)渲染不同細(xì)節(jié)模型,少渲染定點(diǎn)數(shù)和面片數(shù)

缺點(diǎn):需要不同模型,加重美工負(fù)擔(dān),加大游戲容量

MippingMap:為了加快渲染速度和減少圖像鋸齒,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過(guò)的圖片組成的文件,這樣的貼圖被稱為 Mippingmap(增加33%內(nèi)存優(yōu)化GPU)

序列化和反序列化?

序列化是將對(duì)象的狀態(tài)信息轉(zhuǎn)換成可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程

反序列化是將二進(jìn)制的數(shù)據(jù)轉(zhuǎn)化成對(duì)象的類或信息

隱藏Inspector字段的方法?

HideInInspector

SerializeField

AssetBundle和Resources區(qū)別?

Resources 需要把所有資源全部打入安裝包,對(duì)版本升級(jí)不利

AssetBundle 把資源打成幾個(gè)小包,用哪個(gè)就load那個(gè)

旋轉(zhuǎn)使用矩陣,四元數(shù),歐拉角的優(yōu)缺點(diǎn)

旋轉(zhuǎn)矩陣:能增量旋轉(zhuǎn),不能插值,但比四元數(shù)慢,可能發(fā)生矩陣蠕變

歐拉角:不能增量旋轉(zhuǎn),插值可能遭遇萬(wàn)向鎖或其他問(wèn)題,對(duì)給定方位的表達(dá)方式有無(wú)數(shù)種

四元數(shù):能夠增量旋轉(zhuǎn),能夠平滑插值,對(duì)給定方位的表達(dá)方式有二種互為正負(fù)

什么會(huì)導(dǎo)致unity內(nèi)存泄漏

程序未能釋放已經(jīng)不用的內(nèi)存導(dǎo)致內(nèi)存泄漏

狀態(tài)機(jī)和行為樹(shù)的區(qū)別?

狀態(tài)機(jī):狀態(tài)之間需要特定的條件進(jìn)行跳轉(zhuǎn),狀態(tài)節(jié)點(diǎn)不需要復(fù)用,同一時(shí)刻只能有一個(gè)狀態(tài)在執(zhí)行,狀態(tài)節(jié)點(diǎn)的增加會(huì)增加維護(hù)成本,做復(fù)雜的ai不好維護(hù)

行為樹(shù):樹(shù)形結(jié)構(gòu),將狀態(tài)封裝成高度模塊化的行為,行為之間跳轉(zhuǎn)由父節(jié)點(diǎn)決定,節(jié)點(diǎn)復(fù)用性增加,適合做大型復(fù)雜的ai

什么是光照貼圖?有什么意義?

把一片區(qū)域原有光照信息制作成靜態(tài)貼圖,減少實(shí)時(shí)光照,增大內(nèi)存優(yōu)化GPU

光照探針?什么意義?

光照貼圖無(wú)法對(duì)動(dòng)態(tài)物體產(chǎn)生光照效果,增加光照探針使玩家以為實(shí)時(shí)光照,增加游戲體驗(yàn)

--------------------優(yōu)化------------------------

優(yōu)化FPS的方法?

在Edit/Project Setting/Quality中關(guān)閉幀數(shù)鎖定

Application.targetFrameRate = TargetFrameRate;? 設(shè)置幀率

unity優(yōu)化內(nèi)存?

模型頂點(diǎn)優(yōu)化

UI優(yōu)化,小圖放大顯示,圖片復(fù)用

unity中優(yōu)化CPU?

視椎體剔除,遮擋剔除(需要烘焙,相機(jī)照不到的地方不烘焙)

合理安排圖片和材質(zhì),使用 unity 批處理,動(dòng)態(tài)批處理頂點(diǎn)不超過(guò)900個(gè)

合并模型,文理,打包圖集

腳本重構(gòu)

unity中優(yōu)化GPU?

使用光照貼圖,動(dòng)態(tài)光探針,反射探針

Lod、MippingMap(犧牲內(nèi)存優(yōu)化GPU)

減少頂點(diǎn)數(shù)量,簡(jiǎn)化計(jì)算復(fù)雜度

壓縮圖片,適應(yīng)顯存帶寬

GC的產(chǎn)生原因和避免?

GC是為了避免內(nèi)存溢出而產(chǎn)生的垃圾回收機(jī)制

避免:盡量少new對(duì)象,多使用單例對(duì)象池

Unity減少GC的方式?

少用 foreach ,謹(jǐn)慎使用 lambda 表達(dá)式

unity中怎么手動(dòng)GC?

DestroyImmediate

Resources.UnLoadUnusedAssets

System.GC.Collect

-----------------Network---------------------

網(wǎng)絡(luò)數(shù)據(jù)的序列化方法有哪些?有什么區(qū)別?

json:輕量級(jí)數(shù)據(jù)交換格式,具有良好的可讀和便于快速編寫的特性,對(duì)象表示為鍵值對(duì)

protoBuf:google的一種數(shù)據(jù)交換的格式,獨(dú)立于語(yǔ)言,平臺(tái),是一種二進(jìn)制的格式

XML:擴(kuò)展標(biāo)記語(yǔ)言,用來(lái)標(biāo)記數(shù)據(jù),定義數(shù)據(jù)類型,允許用戶對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言,格式統(tǒng)一,跨平臺(tái)和語(yǔ)言

。proto轉(zhuǎn)。cs文件,流程?

protogen.exe -i: 源文件 -o:輸出文件名? .cs

網(wǎng)絡(luò)5層協(xié)議?

應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、實(shí)體層

http,socket,tcp,udp 區(qū)別?

TCP 是面向連接的,tcp 的三次握手最低限度上保證了連接的可靠性

UDP 不是面向連接的,消息傳輸不進(jìn)行收發(fā)確認(rèn),開(kāi)銷小傳輸速度快,實(shí)時(shí)性好

http協(xié)議對(duì)應(yīng)于應(yīng)用層,是建立在TCP協(xié)議之上的一種應(yīng)用。短連接,連接完自動(dòng)斷開(kāi)

Socket相當(dāng)于調(diào)用接口(API),用來(lái)調(diào)取TCP/IP協(xié)議。

Socket連接過(guò)程分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng),客戶端請(qǐng)求,連接確認(rèn)。

粘包產(chǎn)生原因,如何解決?

發(fā)送方發(fā)送多個(gè)包到接收方后混做一個(gè)包

原因:發(fā)送方收集多個(gè)分組一起發(fā)送,接收方 tcp 接受和應(yīng)用層讀取速度不一致

解決:給沒(méi)個(gè)包體添加包頭,包頭是包體的長(zhǎng)度的字節(jié)數(shù)組

-----------------Lua---------------------

lua基本數(shù)據(jù)類型有哪些?

nil 、number 、string 、boolean 、function 、table 、userdata 、thread

lua中什么是元表?

lua 的重載機(jī)制,兩個(gè)表不能直接進(jìn)行函數(shù)運(yùn)算,這時(shí)候定義其中一個(gè)表的元表,在元表里定義一個(gè)指定函數(shù)就可以了

lua中.和:有什么區(qū)別?

lua 中對(duì)于非面向?qū)ο蟮念?,一般?.? 對(duì)于面向?qū)ο蟮念愑?:

lua 調(diào)用 c# 類調(diào)用靜態(tài)函數(shù)或字段時(shí)用 .? 調(diào)用成員函數(shù) :

lua中如何實(shí)現(xiàn)面向?qū)ο螅?/p>

利用元表機(jī)制? __index? __newindex?

pairs和ipairs有什么區(qū)別?

pairs 遍歷表中的所有鍵值對(duì),可以遍歷所有元素

ipairs 只會(huì)遍歷數(shù)組,不能返回 nil 否則會(huì)跳出遍歷

dofile和require有什么區(qū)別?

dofile 引入模塊后,再引入一次會(huì)刷新,相當(dāng)于重新引入

require 引入模塊后,再引入一次也不會(huì)有任何意義

ulua熱更新的原理?

把控制游戲邏輯的代碼寫成 lua 腳本,在移動(dòng)端編寫 lua 的解析器,通過(guò)解析器運(yùn)行最新 lua 腳本

熱更新的流程?

修改 AppConst 的調(diào)試模式和更新模式

生成 wrap 文件

打資源包 Buil Bundle

將 StreamAssets 上傳資源服務(wù)器

打包時(shí)修改 游戲名,公司名,修改屏幕分辨率,橫豎屏

cstolua的原理和優(yōu)點(diǎn)?

減少了跨語(yǔ)言調(diào)用,代碼都用lua寫

優(yōu)點(diǎn):更好的控制 c# 函數(shù)可見(jiàn)性

更快的回收內(nèi)存

可以支持?jǐn)?shù)組參數(shù)

處理二義性

支持重載函數(shù)

u3d類型位null檢測(cè),對(duì)于已經(jīng)為空的 unity object 進(jìn)行提示

嚴(yán)格區(qū)分枚舉類型和 int 值

支持導(dǎo)出模板類

pureMVC框架的結(jié)構(gòu)?

MVC(模型、視圖、控制器)

pbc的使用流程?

protoc.exe -o 目標(biāo)文件 源文件

ulua中如何優(yōu)化?

盡量減少 c# 調(diào)用 lua 的次數(shù)

--------------------shader---------------------

什么是渲染管線?

也叫渲染流水線,是顯示芯片內(nèi)部處理圖形信號(hào)相互獨(dú)立的并行處理單元。

應(yīng)用階段: cpu收集場(chǎng)景信息,將計(jì)算好的數(shù)據(jù)(頂點(diǎn)坐標(biāo),法向量,紋理坐標(biāo),紋理)發(fā)給gpu

幾何階段:頂點(diǎn)坐標(biāo)變換,光照,裁剪,投影以及屏幕映射 "變換三維頂點(diǎn)坐標(biāo)和光照計(jì)算"

光柵化階段:將連續(xù)的數(shù)據(jù)轉(zhuǎn)化成離散的數(shù)據(jù),這里光柵階段是指矢量圖形轉(zhuǎn)化成像素點(diǎn)的過(guò)程

將數(shù)據(jù)3D場(chǎng)景轉(zhuǎn)換成2D圖像,并在屏幕上顯示出來(lái)的總過(guò)程

shader中的數(shù)值類型有哪些?

float 32位浮點(diǎn)數(shù)

half 16位浮點(diǎn)數(shù)

int 32位整型數(shù)

fixed 11比特 [-2,2]? 精度1/256

bool? 布爾數(shù)據(jù)

string? 字符串

sampler? 紋理對(duì)象的句柄?

Lambert和BlinnPong的計(jì)算公式?

漫反射 Lambert :fixed diffuse = max(0 ,dot(normal,lightDir))

漫反射遮蔽(半Lambert):fixed diffuse = max(0 ,dot(normal,lightDir))*0.5+0.5

高光 phong :? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Half3 reflectDir = normalize(reflect(-lightDir,normal));? ? ? ? ? ? ? ? ? ? Float spec = max(0,dot(reflectDir,viewDir));? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Float specValue = pow(spec,_Power);

BlinnPhong 高光:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Half3 halfDir = normalize(lightDir + viewDir));? ? ? ? ? ? ? ? ? ? ? ? ? ? Float spec = max(0,dot(normal,halfDir));? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Float? specValue = pow(spec,_Power);

shaderLab的種類?分別什么區(qū)別?

固定管線(已棄用):

為了兼容老式顯卡,都是頂點(diǎn)光照,特征是里面出現(xiàn)了形如下面Material塊、沒(méi)有CGPROGRAM和ENDCG塊。

頂點(diǎn)和片元著色器 Vertex & Fragment Shader

:功能最強(qiáng)大,最自由的形態(tài),特征是在Pass里出現(xiàn)CGPROGRAM和ENDCG塊,編譯指令#pragma

最主要的包括:#pragma vertex name?

#pragma fragment name

#pragma target name

#pragma only_renderers name name ...?

#pragma exclude_renderers name name...

表皮著色器(SurfaceShader):可以認(rèn)為是一個(gè)光照shader的語(yǔ)法糖,手游不建議使用

特征是在SubShader里出現(xiàn)CGPROGRAM和ENDCG塊。(而不是出現(xiàn)在Pass里。因?yàn)镾urfaceShader自己會(huì)編譯成多個(gè)Pass。)

頂點(diǎn)函數(shù)中常用哪些語(yǔ)義?分別代表什么含義?

POSITION? ? ? ? 頂點(diǎn)坐標(biāo)

TANGENT? ? ? ? 切線

Normal? ? ? ? ? 法線

TEXCOORD0 ~ n? 紋理坐標(biāo)

COLOR? ? ? ? ? 頂點(diǎn)顏色

AlphaBlend代表什么階段?有哪些常見(jiàn)混合方式?

用于兩個(gè)透明物體的疊加顯示效果,Blending 就是處理透明度的,處理光柵化的最后階段顯示在屏幕上的顏色

常見(jiàn)混合方式:

Blend zero one :僅顯示目標(biāo)的RGB 無(wú)透明通道處理(alpha為1)

Blend one zero :僅顯示源的RGB 無(wú)透明通道處理(alpha為1)

Blend one one :目標(biāo)和源的RGB值相加,無(wú)透明通道處理(alpha為1)

Blend ScrAlpha zero :僅顯示源的顏色(處理透明通道)

Blend ScrAlpha OneMinusDstAlpha :源RGB * alpha + 目標(biāo)RGB * (1 - alpha)

ShaderForge中Fresnel節(jié)點(diǎn)代表什么含義?

邊緣亮顯的效果

RenderType的Opaque和Transparent有什么區(qū)別?

渲染標(biāo)簽類型 Opaque 是不透明的 , Transparent 是透明的

RenderQueue中有哪些參數(shù)?

Background?,Geometry,AlphaTest?,Transparent,Overlay???

shader中Fallback什么意思?

在運(yùn)行平臺(tái)硬件不支持該shader的情況下,選擇替代shader。

------------------cocos2dx & C++-------------------

NULL和nullptr的區(qū)別?

NULL在c++中是一個(gè)宏,是一個(gè)空指針常量,如果將NULL擴(kuò)展為常數(shù),那么這個(gè)數(shù)是0,類型為int。所以,常數(shù)0既是整型常量,也是空指針常量,這就有可能導(dǎo)致二義性問(wèn)題。因此,c++11新標(biāo)準(zhǔn)引入了nullptr,將其作為空指針常量。

虛繼承的意義?

虛繼承不管父類派生出多少個(gè)子類在內(nèi)存中總存在一套數(shù)據(jù),解決了多父類重復(fù)成員只保留一份的問(wèn)題,普通繼承一般會(huì)存在于派生類個(gè)數(shù)對(duì)應(yīng)的N個(gè)數(shù)據(jù)

new,delete,malloc,free的區(qū)別?

new、delete是C++中關(guān)鍵字,需要編譯器支持,而malloc和free是標(biāo)準(zhǔn)庫(kù)函數(shù)。需要頭文件支持,它們都可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。

new操作符申請(qǐng)內(nèi)存分配時(shí)無(wú)須指定內(nèi)存塊的大小,編譯器會(huì)根據(jù)類型信息自行計(jì)算。而malloc則需要顯式地指出所需內(nèi)存的尺寸。

new是強(qiáng)制類型的,malloc不是,需要類型轉(zhuǎn)換

new 可以調(diào)用構(gòu)造函數(shù)在聲明的時(shí)候初始化

malloc只是分配空間,需要在其他地方初始化

而delete不僅會(huì)釋放空間,在釋放前會(huì)調(diào)用析構(gòu)函數(shù)

虛函數(shù)和純虛函數(shù)有什么區(qū)別?

虛函數(shù)和純虛函數(shù)可以定義在同一個(gè)類(class)中,含有純虛函數(shù)的類被稱為抽象類(abstract class),而只含有虛函數(shù)的類(class)不能被稱為抽象類(abstract class)。

虛函數(shù)可以被直接使用,也可以被子類(sub class)重載以后以多態(tài)的形式調(diào)用,而純虛函數(shù)必須在子類(sub class)中實(shí)現(xiàn)該函數(shù)才可以使用,因?yàn)榧兲摵瘮?shù)在基類(base class)只有聲明而沒(méi)有定義。

虛函數(shù)和純虛函數(shù)都可以在子類(sub class)中被重載,以多態(tài)的形式被調(diào)用。

虛函數(shù)和純虛函數(shù)通常存在于抽象基類(abstract base class -ABC)之中,被繼承的子類重載,目的是提供一個(gè)統(tǒng)一的接口。

子類析構(gòu)是需要手動(dòng)調(diào)用父類的析構(gòu)嗎?

不需要。析構(gòu)時(shí),先析構(gòu)派生類,再析造基類。

什么是引用?什么是指針?有什么區(qū)別?

指針的本意是可以指向一塊地址空間,這就意味著指針可以指向未初始化的內(nèi)存空間。

引用的意思更像是一個(gè)對(duì)象的別名,是指代這個(gè)對(duì)象的一個(gè)名字。

引用類似于一個(gè)常量指針,當(dāng)指定了一個(gè)對(duì)象的引用,就不能把這個(gè)引用改變成其他對(duì)象的引用了。

將引用作為函數(shù)返回值的好處?

好處:在內(nèi)存中不產(chǎn)生被返回值的副本

注意事項(xiàng):不能返回局部變量的引用

不能返回函數(shù)局部new分配的內(nèi)存的引用

可以返回類成員的引用

流操作符重載返回值申明為引用的引用

在另一些操作符中,不能返回引用:+-*/ 四則運(yùn)算符

C++是不是類型安全的

類型不安全

宏定義和const常量有什么區(qū)別?

define是宏定義,程序在預(yù)處理階段將用define定義的內(nèi)容進(jìn)行了替換。因此程序運(yùn)行時(shí),常量表中并沒(méi)有用define定義的常量,系統(tǒng)不為它分配內(nèi)存。

const定義的常量,在程序運(yùn)行時(shí)在常量表中,系統(tǒng)為它分配內(nèi)存。

define定義的常量,預(yù)處理時(shí)只是直接進(jìn)行了替換。所以編譯時(shí)不能進(jìn)行數(shù)據(jù)類型檢驗(yàn)。

  const定義的常量,在編譯時(shí)進(jìn)行嚴(yán)格的類型檢驗(yàn),可以避免出錯(cuò)。

數(shù)組和指針的區(qū)別?

數(shù)組要么在靜態(tài)存儲(chǔ)區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要么在棧上被創(chuàng)建。數(shù)組名對(duì)應(yīng)著(而不是指向)一塊內(nèi)存,其地址與容量在生命期內(nèi)保持不變,只有數(shù)組的內(nèi)容可以改變。

指針可以隨時(shí)指向任意類型的內(nèi)存塊,它的特征是“可變”,所以我們常用指針來(lái)操作動(dòng)態(tài)內(nèi)存。指針遠(yuǎn)比數(shù)組靈活,但也更危險(xiǎn)。

當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí),該數(shù)組自動(dòng)退化為同類型的指針。

復(fù)雜聲明void*(*(*fp1)(int))[10]代表什么含義?

fp1被聲明成為一個(gè)函數(shù)的指針,該函數(shù)返回指向指針數(shù)組的指針.

cocos命令有什么用?請(qǐng)寫出創(chuàng)建工程的命令

cocos new 項(xiàng)目名 -p com.xx.xx -l 項(xiàng)目語(yǔ)言(cpp) -d 創(chuàng)建位置

cocos2dx中場(chǎng)景圖的結(jié)構(gòu)和遍歷方式

cocos2dx使用圖片和圖集的區(qū)別?

cocos2dx中action動(dòng)作中,to和by的區(qū)別?

By相對(duì)節(jié)點(diǎn)對(duì)象的當(dāng)前位置? To 絕對(duì)位置

cocos2dx中獲得鼠標(biāo)點(diǎn)擊事件的方法?

//創(chuàng)建監(jiān)聽(tīng)

_mouseListener = EventListenerMouse::create();

_mouseListener->onMouseMove = CC_CALLBACK_1(MouseTest::onMouseMove,this);

_mouseListener->onMouseUp = CC_CALLBACK_1(MouseTest::onMouseUp, this);

_mouseListener->onMouseDown = CC_CALLBACK_1(MouseTest::onMouseDown,this);

_mouseListener->onMouseScroll = CC_CALLBACK_1(MouseTest::onMouseScroll, this);

//綁定監(jiān)聽(tīng)

_eventDispatcher->addEventListenerWithSceneGraphPriority(_mouseListener, this);

cocos2dx中開(kāi)啟update的方法

this->scheduleUpdate();

cocos2dx中如何判斷鼠標(biāo)點(diǎn)擊了圖片?

判斷點(diǎn)擊的圖片 tag

判斷鼠標(biāo)點(diǎn)擊的像素點(diǎn)是否在圖片中

-----------------cocoscreator & JS--------------------

js的基本數(shù)據(jù)類型有哪些?

String 、Number 、Boolean 、Null 、Undefined 、Symbol

js的var和let區(qū)別?

var定義的變量可以修改,如果不初始化會(huì)輸出undefined,不會(huì)報(bào)錯(cuò)。

let是塊級(jí)作用域,函數(shù)內(nèi)部使用let定義后,對(duì)函數(shù)外部無(wú)影響。

js的use strict的用法有什么用?

嚴(yán)格模式下你不能使用未聲明的變量。

消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全;

提高編譯器效率,增加運(yùn)行速度;

為未來(lái)新版本的Javascript做好鋪墊。

js的變量提升指什么?

函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。 變量可以在使用后聲明,也就是變量可以先使用再聲明。

只有聲明的變量會(huì)提升,初始化的不會(huì)。

js繼承使用哪個(gè)關(guān)鍵字?

extends

js中require和export的作用?

遵循 CommonJS/AMD,只能在運(yùn)行時(shí)確定模塊的依賴關(guān)系及輸入/輸出的變量,無(wú)法進(jìn)行靜態(tài)優(yōu)化。

typeof和instanceof的區(qū)別?

經(jīng)常用到來(lái)判斷一個(gè)變量的類型,以及是否為空

typeof的返回值是個(gè)字符串,返回的字符串表達(dá)了程序員想要輸出的變量類型

instanceof 運(yùn)算符用來(lái)檢測(cè) constructor.prototype 是否存在于參數(shù) object 的原型鏈上。instanceof 可以在繼承關(guān)系中用來(lái)判斷一個(gè)實(shí)例是否屬于它的父類型。

cc.Class 聲明有什么作用?

聲明一個(gè)類

cc中如何聲明數(shù)組?

default:[]

cc中如何獲取自身其他組件?

this.node.getComponent()

cc中如何查找自己的孩子?

this.node.getChildByName("xxx");

cc.find("xxx", this.node);

cc的生命周期有哪些?

onLoad 、start 、update 、lateUpdate 、onDestroy 、onEnable 、onDisable

cc中如何銷毀節(jié)點(diǎn)?

node.destroy()

cc中常駐節(jié)點(diǎn)有什么用?怎么設(shè)置?

通過(guò)常駐節(jié)點(diǎn)進(jìn)行場(chǎng)景資源管理和參數(shù)傳遞

使用 cc.game.addPersistRootNode(this.node)添加為常駐節(jié)點(diǎn)

在creator的引擎里面只有根節(jié)點(diǎn)才能夠被成功的設(shè)置為常駐節(jié)點(diǎn)

cc中如何動(dòng)態(tài)加載資源?

所有需要通過(guò)腳本動(dòng)態(tài)加載的資源,都必須放置在 resources 文件夾或它的子文件夾下

resources 需要在 assets 文件夾中手工創(chuàng)建,并且必須位于 assets 的根目錄

cc.loader.loadRes

cc中如何發(fā)射和監(jiān)聽(tīng)事件?

? ? cc.SystemEvent.EventType.KEY_DOWN (鍵盤按下)

? ? cc.SystemEvent.EventType.KEY_UP (鍵盤釋放)

? ? cc.SystemEvent.EventType.DEVICEMOTION (設(shè)備重力傳感)

? ? 自定義回調(diào)函數(shù):callback(event);

cc中如何判斷兩個(gè)精靈發(fā)生碰撞?

在 rigidbody 中 開(kāi)啟碰撞監(jiān)聽(tīng)

開(kāi)啟碰撞監(jiān)聽(tīng),定義回調(diào)函數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容