查看: 1554|回复: 0
打印 上一主题 下一主题

[Unity3d教程]Unity中C#网络通信和下载保存

[复制链接]

5472

主题

6

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
76544
精华
23

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2013-1-5 16:52:19 |只看该作者 |倒序浏览
开发环境Window7unity3d  3.4.1VS2010MB525defy 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[csharp] view plaincopyprint?
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 + ":
";
            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[csharp] view plaincopyprint?
  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 = ***e;  
        renderer.enabled = ***e;  
        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和高光贴图,虽然没有法线,效果还不错,消耗不是很大,还有很大上升空间~ ~ 手机上效果略次,微弱显示高光效果,有待改善- - 本文来源:羽化博客 更多分享尽在web3D纳金网http://www.narkii.com/
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-22 06:39 , Processed in 0.067051 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部