程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Unity中C#網絡通信和下載保存

Unity中C#網絡通信和下載保存

編輯:C#入門知識

 

開發環境

Window7

Unity3D  3.4.1

VS2010

MB525defy Android 2.2.1

        羽化的第十五篇博客,這一星期蹭了傑哥和伍哥兩頓飯有點不好意思,日後一定請回來-0- 楊和家人去了內蒙做生意,從此告別代碼,人生軌跡真是難以估計啊,回想年初來公司的時候,和他一起做游戲Demo基本上就是羽化第一次接觸游戲制作,從中學習到不少東西,大家年齡相仿,聊了很多也能算上朋友吧,希望他在新的環境生意興隆,萬事平安。最近打翻了《寄生前夜:第3次生日》,PSP難得的大作,不可否認Square做游戲畫面和劇情都是一流,Aya走了,與FF8 OP同名的一曲“EyesOn Me”帶走了我們的回憶,帶來了對游戲業新的希望。

        這次帶來的是Unity中C#網絡通信和下載保存,都是很有實用價值的代碼,希望大家喜歡=。= 再免費送上最近做的測試效果圖,公司美術一直很給力,程序與美術之間都在共同進步,這次貼圖測試效果出來了-0- 以後有機會就給大家分享下材質和Shader方面的學習經驗。

 

本次學習:

1. 簡單的C#通信測試

2. 下載和本地保存實例

 

1.  簡單的C#通信測試

        首先是與服務器端通信測試,這裡羽化和明哥商量的是用C#,因為我們都是Java出生,服務器部分就交給了明哥,羽化這裡只是截取了主要實現的小部分代碼,所以只能拿來參考,並不能用於實戰,明哥最近又在忙什麼多線程通信,線程鎖之內的高深問題-0- 這是羽化寫的客戶端實現,只能一次通信,服務器可以多次接受,下面是服務器的截圖,在VS2010中運行截圖:

\


        代碼放在了下面的工程文件中,這裡主要學習Unity中的客戶端。總共分成3步:連接-發送-接受,簡單的3步,這裡的“192.168.0.154”是羽化本機的IP地址,大家要測試時不要忘了更改,再者若沒打開服務器就運行本工程,就會停頓一定時間,在報錯開始運行,原因是羽化沒開多線程- - CtoS.cs

 

using UnityEngine; 

using System.Collections; 

using System.ComponentModel ; 

using System; 

using System.Text; 

using System.Net; 

using System.Net.Sockets; 

using System.Threading; 

 

public class CtoS : MonoBehaviour  

    public string SendM= "-(00)-"; 

    public string server = "192.168.0.154"; 

    private Socket socket;   

    public GUIText Test; 

     

    void Start ()  

    { 

        try 

        { 

            /*Connect*/ 

            socket = new Socket ( AddressFamily.InterNetwork , SocketType.Stream , ProtocolType.Tcp); 

            IPEndPoint tempRemoteIP = new IPEndPoint (IPAddress.Parse(server), 11000); 

            EndPoint epTemp = (EndPoint)tempRemoteIP; 

            socket.Connect(epTemp); 

            print("Success Connect"); 

             

            /*Send*/ 

            Byte[] bytesSent = Encoding.ASCII.GetBytes(SendM); 

            socket.Send(bytesSent,bytesSent.Length,0); 

             

            /*Received*/ 

            Byte[] bytesReceived = new Byte[256]; 

            int bytes = 0; 

            string page = "Server: Success Connect " + server + ":\r\n"; 

            do  

            { 

                 bytes = socket.Receive(bytesReceived, bytesReceived.Length, 0); 

                 page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes); 

            } 

            while (bytes > 0); 

            Test.text = page; 

             

        } 

        catch (Exception e) 

        { 

            print(e);    

        }    

    } 

}服務器打開的話客戶端收到返回信息(和發送一樣)運行效果如下圖:

\
 

2.  下載和本地保存實例

        下載是羽化一直關心的問題,由於開發的是網頁和手機平台,有些資源要得到用戶許可下載到本地,這樣可以加速游戲運行,所以這裡羽化就以一張圖片為例,這裡做了平台判斷,在Android上依然可以保存在SD上,PC端就下載到了工程的download裡面。代碼如下:

Download.cs

 

using UnityEngine;  

using System.Collections;  

using System.IO;  

public class Download : MonoBehaviour   

{  

    public string url = "http://ww3.sinaimg.cn/large/80dfe250jw1dle1r2v4t9j.jpg";  

    public GUIText Test;  

    WWW www;  

    Color Alpha;  

    bool Appear = false;  

    int a = 0;  

      

    IEnumerator Start()   

    {  

        www = new WWW(url);  

        //定義www為WWW類型並且等於所下載下來的WWW中內容。  

        yield return www;  

        //返回所下載的www的值  

        renderer.material.shader = Shader.Find("Transparent/Diffuse");  

        renderer.material.mainTexture = www.texture;  

          

        Texture2D newTexture = www.texture;  

        byte[] pngData = newTexture.EncodeToPNG();  

        try  

        {  

            if (Application.platform == RuntimePlatform.Android)  

            {  

                File.WriteAllBytes(Application.persistentDataPath + "/ICO.png", pngData);  

            }  

            else  

            {  

                File.WriteAllBytes(Application.dataPath + "/download/ICO.png", pngData);  

            }  

        }  

        catch(IOException e)  

        {  

            print(e);  

        }  

          

        Alpha = renderer.material.color;  

        Alpha.a = 0;  

        Appear = true;  

        renderer.enabled = true;  

        renderer.material.color = Alpha;  

        //將下載下來的WWW中的圖片賦予到默認物體的材質上進行渲染出來  

    }  

      

    void Update()  

    {  

        Test.text = "DownLoad: " + www.progress;  

        if(www.progress == 1 && Appear)   

        {  

            a++;  

            Alpha = renderer.material.color;  

            Alpha.a += 0.01F;  

            renderer.material.color = Alpha;  

        }  

          

           if(Input.GetKey(KeyCode.Escape))     

               {     

                  Application.Quit();     

               }     

        }  

 

 

下載效果圖:

\
         由於上面的服務器測試用C#,所以這個羽化也改寫成了C#,方便管理,這裡需要注意的是,保存的圖片是以我們規定的形式輸出出去的,羽化把這圖片做成了這個模型的貼圖,漸變顯示出來,這個模型有動作的,羽化也讓它播放了出來,圖片為網上任意找的一張圖片,當然也是羽化喜歡的東西-0- 那可憐的工資帶不動的愛啊- -

老樣子- -工程地址:

http://dl.dbank.com/c0txqah13k


        最後送上一張我們做的測試截圖,Unity自帶的Shader和高光貼圖,雖然沒有法線,效果還不錯,消耗不是很大,還有很大上升空間~ ~ 手機上效果略次,微弱顯示高光效果,有待改善- -
\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved