A. Unity網路編程(一)常見概念
一直用Http用多了 復習一下基礎
Unity通訊一般分為2類
Http : 應用層 Unity內置的UnityWebRequest類進行通信(之前寫過一個分發器垃圾框架)用於交互量比較小
Socket:傳輸層 比較底層 實現TCP/UDP 用於頻繁的通信
這個是基於TCP 和IP傳輸不同消息
這個是三種常見的網路層次劃分
基本數據單位為幀
主要的協議:乙太網協議
基本數據單位為IP數據報;
IP協議(Internet Protocol,網際網路互聯協議)
ICMP協議(Internet Control Message Protocol,網際網路控制報文協議)
ARP協議(Address Resolution Protocol,地址解析協議)
RARP協議(Reverse Address Resolution Protocol,逆地址解析協議)
包含的主要協議:TCP協議(Transmission Control Protocol,傳輸控制協議)、UDP協議(User Datagram Protocol,用戶數據報協議)
數據傳輸基本單位為報文
包含的主要協議:
FTP(文件傳送協議)、Telnet(遠程登錄協議)、DNS(域名解析協議)、SMTP(郵件傳送協議),POP3協議(郵局協議),HTTP協議(Hyper Text Transfer Protocol)。
分配給用戶上網使用的網際協議
目前IPv4多 比如192.168.1.1
新的IPv6(因為IPv4數量不夠分配)如3ffe:3201:1401:1280:c8ff:fe4d:db39:1984。
Internet最基本的協議
TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。
可靠的協議 通過三次握手建立的面向連接通信協議
3次握手 四次揮手 實習生常考
TCP連接建立過程(三次握手):
1.首先Client端發送連接請求報文
2.Server段接受連接後回復ACK報文,並為這次連接分配資源。
3.Client端接收到ACK報文後也向Server段發生ACK報文,並分配資源,這樣TCP連接就建立了。
TCP連接斷開過程(四次揮手):
1.Client端發起中斷連接請求(FIN報文)
2.Server端接到FIN報文後,發送ACK伺服器還有消息沒發完讓Client待命,Client端就進入FIN_WAIT,繼續等待Server端的FIN報文
3.Server端確定數據已發送完成,則向Client端發送FIN報文,
4.Client端收到FIN報文後發送ACK後進入TIME_WAIT狀態,如果Server端沒有收到ACK則可以重傳,Server端收到ACK後 關閉,Client等待了2MSL後依然沒有收到回復客戶端也關閉
SYN:"synchronize"請求同步標志;;ACK:"acknowledge"確認標志";FIN:"Finally"結束標志。
為什麼要三次握手?
防止因為網卡導致Sever收到多次Client請求 建立N個監聽 造成資源浪費
為什麼要四次揮手?
自己不請求直接關閉 但是伺服器還能給你發數據 伺服器浪費資源 而且客戶端也會強行接收
使用TCP的協議:FTP(文件傳輸協議)、Telnet(遠程登錄協議)、SMTP(簡單郵件傳輸協議)、POP3(和SMTP相對,用於接收郵件)、HTTP協議等。
面向無連接的通訊協議
UDP通訊時不需要接收方確認,屬於不可靠的傳輸 會丟包
UDP與TCP位於同一層,但它不管數據包的順序、錯誤或重發
主要用於面向查詢---應答的程序
每個UDP報文分UDP報頭和UDP數據區兩部分
UDP報頭由4個域組成,其中每個域各佔用2個位元組
(1)源埠號;
(2)目標埠號;
(3)數據報長度;
(4)校驗值。
使用UDP協議包括:TFTP(簡單文件傳輸協議)、SNMP(簡單網路管理協議)、DNS(域名解析協議)、NFS、BOOTP。
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網路協議
HTTP協議特點:
簡單快速 靈活 無連接 無狀態 支持B/S(瀏覽器/伺服器)及C/S(客戶端/伺服器)模式。
URL
和伺服器有一些頻繁的交互 用http時不時請求 叫輪詢 效率低下
soket可以理解為插座 插頭接上了可以保持通信
埠:
每個Socket連接都是從一台計算機網卡的一個埠連接到另外一台計算機網卡的某個埠。
IP是房子的話 埠就是門
TCP埠和UDP埠相互獨立 如TCP255埠 和UDP255埠 不沖突
周知埠
范圍從0到1023,其中80埠分配給WWW服務,21埠分配給FTP服務等。
瀏覽器的地址欄里輸入一個網址的時候是不必指定埠號的,因為在默認情況下WWW服務的埠是「80」。
網路服務是可以使用其他埠號的 比如 網址:8080
但是有些系統協議使用固定的埠號,它是不能被改變的,比如139 埠專門用於NetBIOS與TCP/IP之間的通信,不能手動改變。
自己開發時盡量不要使用1024之下的埠,可能會與系統埠沖突。
服務端:
創建socket對象
bind:綁定IP地址和埠
listen:開始監聽綁定的IP地址和埠,等待客戶端的連接
accept:如果有客戶端發起連接,通過accept接受連接請求,連接成功後會復制一個socket出來用於和當前接受連接的客戶端進行通信。(服務端最初創建的那個socket只是用來監聽並建立連接用的,實際和客戶端通信並不是最初的socket,而是在accept這一步會自動創建一個新的socket出來和客戶端通信。)
read/write:使用新的socket讀寫數據
close:關閉socket,如果關閉的是服務端的監聽socket,則無法接收新的連接,但是已經創建的和客戶端的連接不會被關閉。
客戶端:
創建socket對象
connect:連接服務端,連接成功後系統會自動分配埠
read/write:連接成功後,就可以進行數據的讀寫了,這里讀寫使用的socket還是第一步創建的socket對象。
close:關閉連接。
如果收到了長度為0的數據,則代表遠程socket關閉了連接。
伺服器:
創建socket對象
bind:綁定IP和埠,用於接收數據(注意這里綁定完就可以直接接收數據了,並不需要等待連接)
read/write:讀寫數據
客戶端:
創建socket對象
read/write:讀寫數據,不需要先建立連接,直接給對應的IP+埠發送數據即可。
由於沒有建立連接以及連接的保障,UDP在傳輸效率上會很高
UDP有一個功能是TCP所不具備的,那就是廣播功能(UDP可以將消息發送到在同一廣播網路上的每個主機 CS、魔獸爭霸區域網對戰)。
HTTP/HTTPS(比http更安全):小游戲 網頁 間歇性發送鏈接 偶爾延遲。
TCP長連接: 卡牌游戲 某些mmo 客戶端和伺服器都可以獨立發包 偶爾延遲
UDP:動作游戲 mmo 槍戰 客戶端和伺服器都可以獨立發包 無法接受延遲
可以混合使用你的MMO客戶端也許首先使用HTTP去獲取上一次的更新內容,然後使用UDP跟游戲伺服器進行連接。
現在也有kcp 就是tcp和udp結合 快速安全可靠
簡單直接的長連接
可靠的信息傳輸
數據包的大小沒有限制
坑多 斷線檢測、慢速客戶端響應阻塞數據包,對開放連接的各種dos攻擊,阻塞和非阻塞IO模型
丟包會有阻塞機制(一般是重發 tcp相反) 所以手機游戲ping跳1000就這個原因
只使用一個socket進行通信
快速
基於數據包構建
靈活 多種方式處理延遲
很多東西沒有要自己構建
不可靠
丟包
客戶端直接開始進行計算而不等待服務端確認是一種典型的隱藏延遲的技術(容易被抓包篡改)。
我們到底是使用TCP還是UDP取決於我們能否隱藏延遲。
比如TCP 在棋牌 卡牌游戲 卡1S無所謂 在動作游戲moba游戲就很致命
可靠的UDP/kcp和TCP不一樣,要去實現一個特殊的阻塞控制,而且還要保證可靠性,也可以使用許多支持可靠通信的UDP庫,但是庫一般為了通用會降低某種新能,自己根據項目情況寫可以發揮到極致
如果不知道用什麼就TCP
B. 關於Unity的編程語言問題
C#,因為其實VB.NET比較容易轉到C#,雖然你看著語法不一樣,但是對於類庫的使用時一致的。
只有javaScript,其實官方是叫做unityscript的,我自己沒用過,不過顯然C#用的人比較多。原因是你看unity的招聘信息上是要求C#的比較多。
C. unity游戲開發需要代碼嗎
不需要。
Unity 是實時3D互動內容創作和運營平台 。包括游戲開發、美術、建築、汽車設計、影視在內的所有創作者,藉助Unity將創意變成現實] 。
Unity平台提供一整套完善的軟體解決方案 ,可用於創作、運營和變現任何實時互動的2D和3D內容,支持平台包括手機、平板電腦、PC、游戲主機、增強現實和虛擬現實設備。
基於Unity開發的游戲和體驗月均下載量高達30億次,並且其在2019年的安裝量已超過370億次 。
全平台(包括PC/主機/移動設備)所有游戲中有超過一半都是使用Unity創作的;在Apple應用商店和Google Play上排名最靠前的1000款游戲中,53%都是用Unity創作的。Unity提供易用實時平台,開發者可以在平台上構建各種AR和VR互動體驗。
Unity 引擎的靈活性 使開發者能夠為超過20個平台創作和優化內容 ,這些平台包括iOS、安卓、Windows 、Mac OS、索尼PS4、任天堂Switch 、微軟Xbox One、谷歌Stadia、微軟Hololens、谷歌AR Core、蘋果AR Kit、商湯SenseAR等等 。
公司超過1800人規模的研發團隊,同時跟隨合作夥伴迭代 ,確保在最新的版本和平台上提供優化支持服務。
D. Unity3D 游戲編程 難嗎 好嗎
你可以先去【繪學霸】網站找「游戲特效/unity3D」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=305,306&zdhhr-11y17r-1575284660332882500
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】:
www.cgwang.com/course/gecoursemobilecheck/?zdhhr-11y17r-1575284660332882500
在「游戲特效/unity3D」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
E. unity用什麼編程語言
unity用C#語言。Unity是實時3D互動內容創作和運營平台。包括游戲開發、美術、建築、汽車設計、影視在內的所有創作者,藉助Unity將創意變成現實。
Unity平台提供一整套完善的軟體解決方案,可用於創作、運營和變現任何實時互動的2D和3D內容,支持平台包括手機、平板電腦、PC、游戲主機、增強現實和虛擬現實設備。
應用領域:
Unity的客戶包括動視暴雪,EA,Ubisoft等國外大廠,也包括騰訊,網易,巨人,盛大,完美世界,西山居等國內知名大廠,全球超過1900萬的中小企業以及個人開發者。
全平台(包括Steam/PC/主機/手機)所有游戲中有一半都是基於Unity創作的,在Apple應用商店和Google Play上排名最靠前的1000款游戲中,53%都是用Unity創作的。
以上內容參考:網路-Unity
F. 新手如何從零開始學習unity
自從 unity5發布免費過後,有很多獨立游戲開發者轉向unity游戲開發,unity的優勢就是多終端
跨平台打包,入門也快,很多人感覺自己的英文不好,就覺得學不會,其實這是一個誤區,
unity的界面雖然是英文的,但是它的窗口就只有那麼幾個,用的次數多了,也就自然的熟練
了,那麼新手該如何從零開始學習unity呢?接下來給大家分享一點經驗與技巧。
(一) 首先unity的腳本可以用很多語言來寫,比如java,js,c#,我個人比較喜歡C#,因為剛開始的時候我學習的是C++,後來又做C#窗體程序,我們先從腳本說起,腳本我個人推薦用C#,很多人說自己沒有C#的基礎,其實自己自學也能夠學會,在unity中學會簡單的游戲邏輯開發,其實不需要太多的C#知識,unity用的VS編輯器其實是在C#裡面調用unity的API,因為它在創建腳本的時候引入了一個 unityEngine的空間,這個空間就是unity的 C# API,那麼新手只需要去學習unity的C# API介面就行了, untiy API 文檔 Unity User Manual (
(二)關於unity客戶端學習,首先你做為一個新手,我建議你從unity2D開始學習,我不建議你一開始就去學3D,因為3D游戲會涉及到很多比較復雜的計算,那麼也就是在創建游戲項目的時候,選擇一個2D游戲去開發,關於2D游戲的素材,大家自己可以在 某寶上面去購買,買來自己練習,非常便宜,那麼學習2D游戲的學習順序是什麼呢,在這里我也給大家整理了一下。
G. C#學到什麼程度可以開發Unity游戲
以《C#入門經典(第七版)》為例,看到「第八章:面向對象編程簡介」即可。
開發Unity游戲必須掌握的C#知識點:
數據類型、類型轉換。字元串(String)、結構體(Struct)、枚舉(Enum)、數組(Array)變數、常量、運算符、判斷、循環、方法。面向對象類:C# 繼承、C# 多態性、封裝、C# 運算符重載、C# 介面(Interface)。
特性(Attribute)、 反射(Reflection)、屬性(Property)、 索引器(Indexer)、委託(Delegate)、事件(Event)、 集合(Collection)、 泛型(Generic)、 匿名方法、 不安全代碼、C# 多線程。
必須掌握的Unity3D知識點:
Unity3D 基礎操作,Unity3D 界面UI(UGUI或NGUI),Unity3D 動畫(MecanimDOtween)06 Unity3D 圖形數學(點乘、歐拉角、四元數等)這個時候其實已經能夠完成一些初級案例(能做點4399小游戲了)。
Unity3D 常見對象和結構APIUnity3D Android基礎(界面,廣告,支付)Unity3D 粒子系統(shuriken)Unity3D 背包和鍛造系統(UI的綜合運用)。
Unity3D UI框架(綜合處理)Unity3D 行為樹(BehaviorDesigner)Unity3D 數據處理(Json、Xml、存檔)LUA 語言編程(熱更新)Unity3D 游戲編程框架(mvcs)。
H. 如何自學unity3d
你可以先去【繪學霸】網站找「游戲特效/unity3D」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=306&zdhhr-11y04r-1610725651392770307
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】:
www.cgwang.com/course/gecoursemobilecheck/?zdhhr-11y04r-1610725651392770307
在「游戲特效/unity3D」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
I. 如何學好 Unity
學習Unity的幾個階段和要注意的事項。
一、C#程序設計
Unity使用C#來開發,所以學習Unity首先要學習C#的語法,和C#讀寫文件等API系統調用。學習C#語法可以找個C#的教程也可以買C#的編程語言的書,學習C#學習基本的語法,基礎的數據結構,如List, Dictionary等,同時學習一些基礎的OS的API操作,比如文件讀寫等。不用去學習windows的一些開發和API,因為我們學習都是基於Unity來開發。
二、Unity基礎知識
學完C#以後,接下來就學習Unity編輯器操作與Unity的代碼開發。Unity開發大部分都是可視化的,開發起來還是非常簡單和方便的。首先學會編輯器的基本操作,擺放3D物體,添加物理剛體,添加組件,運行等基本操作。
接下來從場景樹節點開始,再到常用的組件實例,GameObject對象,Transform組件,MeshRenderer組件,SkinnedMeshRenderer組件,基礎材質系統(Standart Shader主要參數,Diffuse Shader主要參數)。
AudioSource組件,碰撞器組件,物理剛體組件,物理引擎,射線檢測,事件系統,接入滑鼠按鍵等事件,UGUI與UI組件,如Canvas組件,Sprite組件,Label組件,Button組件,滾動列表,Mask組件等。
五、游戲開發中的經典的專題與演算法
游戲開發中經典的一些專題與演算法也是我們需要去學習的,比如游戲怪物的AI編寫,我們會用到行為決策樹,地圖編輯器,尋路導航,Socket網路編程,Protobuf協議,如何與伺服器對接等常用游戲開發中的專題和演算法。
六、性能優化與穩定性
游戲開發完成以後,對於性能需要優化,比如游戲的流暢度,手感,幀率,CPU佔用率,Shader優化,Drawcall優化,陰影優化,內存優化,演算法優化等。穩定性也很重要,在測試的過程中保證程序的穩定性,穩定性直接和用戶的流水率等運營數據有關系,好的一個游戲產品,穩定性是最基礎的保障,同時穩定性又最考驗技術主管與團隊的功底。