開發環境
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中運行截圖:
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();
}
}
}
下載效果圖:
老樣子- -工程地址:
http://dl.dbank.com/c0txqah13k