2019-01-11 10:49:14 weixin_41738734 阅读数 1029
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4646 人正在学习 去看看 张刚

在Unity3D上进行UDP通讯

简介

Unity3D版本: 2018.3.0f2 Personal
Visual Studio版本:2017

在Unity3D上监听指定端口接收UDP数据
指定本地端口与目标端口发送UDP数据

代码

创建文件TCPUDPSocket.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Net;
using System.Threading;
using System;

public class TCPUDPSocket : MonoBehaviour
{

    UdpClient udpClient;
    IPEndPoint targetPoint;




    bool udp_send_flag = false;
    bool udp_recv_flag = false;
    public void Start_UDPSender(int self_port,int target_port)
    {
        if (udp_send_flag == true)
            return;
        udpClient = new UdpClient(self_port);
        
        targetPoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), target_port);
       
        udp_send_flag = true;
    }
    Thread thrRecv;
    private UdpClient UDPrecv;
    private IPEndPoint endpoint;
    private byte[] recvBuf;
    private Thread recvThread;
    public void Start_UDPReceive(int recv_port)
    {
        if (udp_recv_flag == true)
            return;

        UDPrecv = new UdpClient(new IPEndPoint(IPAddress.Any, recv_port));
        endpoint = new IPEndPoint(IPAddress.Any, 0);
        recvThread = new Thread(new ThreadStart(RecvThread));
        recvThread.IsBackground = true;
        recvThread.Start();

        udp_recv_flag = true;


    }


    public void Close_UDPSender()
    {
        if (udp_send_flag == false)
            return;
        udpClient.Close();
        udp_send_flag = false;
    }

    public void Close_UDPReceive()
    {
        if (udp_recv_flag == false)
            return;
        thrRecv.Interrupt();
        thrRecv.Abort();
        udp_recv_flag = false;
    }

    public void Write_UDPSender(string strdata)
    {
        if (udp_send_flag == false)
            return;
        byte[] sendData = Encoding.Default.GetBytes(strdata);
        udpClient.Send(sendData, sendData.Length, targetPoint);
    }


    public string Read_UDPReceive()
    {
        returnstr = String.Copy(recvdata);
        if (old)
        {
            old = false;
            recvdata = "";
            return returnstr;
        }
        else
            return "";
    }
    bool old = false;
    string returnstr;
    string recvdata;
    private bool messageReceive;
    private void ReceiveCallback(IAsyncResult ar)
    {
        recvBuf = UDPrecv.EndReceive(ar, ref endpoint);
        recvdata += Encoding.Default.GetString(recvBuf);
        old = true;
        messageReceive = true;
    }
    private void RecvThread()
    {
        messageReceive = true;

        while (true)
        {
            try
            {
                if (messageReceive)
                {
                    UDPrecv.BeginReceive(new AsyncCallback(ReceiveCallback), null);
                    messageReceive = false;
                }
            }
            catch(Exception e)
            {

            }
        }
    }





    GUIStyle bb = new GUIStyle();


    // Start is called before the first frame update
    void Start()
    {
        bb.normal.background = null;
        bb.normal.textColor = new Color(1, 0, 0);
        bb.fontSize = 40;
        //Start_TCPClient("192.168.199.231",2333);
        Start_UDPSender(7777,6666);
        Start_UDPReceive(5555);
    }


    string aaa;
    // Update is called once per frame
    void Update()
    {
        aaa = Read_UDPReceive();
    }

    void OnGUI()
    {
        GUI.Label(new Rect(0, 0, 200, 200), aaa, bb);
    }
}

其中包含一些测试代码,可以删除

Start_UDPSender(7777,6666);
Start_UDPReceive(5555);

第一个函数的入口参数:指定本地发送端口,指定对方接收端口
第二个函数的入口参数:指定本地接收端口

2013-06-27 13:00:40 gghu1986 阅读数 1823
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4646 人正在学习 去看看 张刚

Unity3d 动态读取外部文件 收藏 分两种情况:

1,加载封装好的内部文件。

var aaa : Material;//空材质

var bbb : GameObject;//要绑定材质的模型

function Start()

{ aaa.mainTexture = Resources.Load("你的资源名,例如“pic1”不需要文件扩展名");

 bbb.renderer.material = aaa;

 }

 

2,加载磁盘文件

var bbb : GameObject;

function Start ()

{ var www = new WWW ("file://D:\\pic1.jpg"这里也可以是网络图片地址);

 yield www;

bbb.renderer.material.SetTexture("_MainTex", www.texture);

}

 

动态加载外部文件,内部封装的用Resources.Load加载,外部的用www方法调用

2015-05-26 18:10:02 ImOTT 阅读数 620
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4646 人正在学习 去看看 张刚
 1、调用外部浏览器

void OnGUI()
{
  if (GUI.Button(new Rect(50, 50, 100, 30), "Click"))
  {

    Process.Start("IExplore.exe", "http://blog.csdn.net/imott");

  }

}

2、调用外部EXE

void OnGUI()
{
  if (GUI.Button(new Rect(50, 50, 100, 30), "Click"))
  {
    Process.Start("C:\\Program Files\\Tencent\\QQ\\Bin\\QQ.exe");

  }

}

Unity3d 动态读取外部文件分两种情况:
1,加载封装好的内部文件。
var aaa : Material;//空材质
var bbb : GameObject;//要绑定材质的模型
function Start()
{ aaa.mainTexture = Resources.Load("你的资源名,例如“pic1”不需要文件扩展名");
bbb.renderer.material = aaa;
}

2,加载磁盘文件
var bbb : GameObject;
function Start ()
{ var www = new WWW ("file://D:\\pic1.jpg"这里也可以是网络图片地址);
yield www;
bbb.renderer.material.SetTexture("_MainTex", www.texture);
}

动态加载外部文件,内部封装的用Resources.Load加载,外部的用www方法调用 

2013-01-21 14:53:57 jeksonal 阅读数 16707
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4646 人正在学习 去看看 张刚

unity3D 用3DMax 做的模型时需要注意几点

1:方向问题
2:模型尺寸问题

3:模型所占资源大小问题

 

3DMax 做的东西导入到 Unity3D 中,在 Unity3D 引擎中 X 会被反向旋转 90 度();个人处理方式是建模时先将模型 X 轴旋转 90;再调节模型;

3DMax 做的东西导入到 Unity3D 中,由于 3DMax 默认的单位处理机制与 Unity3D 不一样,而导致显示过小的问题;所以,在制作模型前先调节好 3DMax 中的系统单位设置

具体操作:

 菜单栏: 选择 “自定义”  ,

再选择 “单位设置”-- >

 接着点选 “系统单位设置 ”  --->   将系统单位比例设置成:  ;再点击 “ 确定” 保存!

在模型的制作过程当中,为了使物体的坐标在物体的中心点,要记得冻结物体的坐标属性

当模型制作完成时,导出为 FBX 格式时还需注意:

在导出的 设置面板中 :

点击高级选项,然后出现:

确保 “ 场景单位转化为:”的设置为 "Meters"


模型导出后,模型资源可能很大,原因有以下几个:

1: 检测一下材质贴图的格式是否为:.png 的,不是请改过来 ;

2:看模型当中是否有过多的独立存在的物体,将不需要单独 存在给它合并在一块!


要是模型导入到Unity3D 中后,引擎运行变卡,就得看看模型的面是不是太多了!


2014-05-11 01:14:49 u012856866 阅读数 753
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4646 人正在学习 去看看 张刚

Unity3D支持多种外部导入的模型格式,但它并不是对每一种外部模型的属性都支持。具体的支持参数,您可以对照如下列表:

种类
网络
材质
动画
骨骼
Maya的.mb和.mal格式




3D Studio Max的.maxl格式




Cheetah 3D的.jasl格式




Cinema 4D的.c4dl 2格式




Blender的.blendl格式




Carraral



COLLADA


Lightwavel



Autodesk FBX的.dae格式




XSI 5的.xl格式



SketchUp Prol



Wings 3Dl



3D Studio的.3ds格式



Wavefront的.obj格式

 

Drawing InterchangeFiles的.dxf格式



 

在下面的实例中,我们利用3D MAX来制作一个完整的动画,并导出FBX的格式给Unity3D使用。

第一步:创建新的工程文件。

创建一个名为“Turret”的项目文件夹。然后打开Unity3D软件,选择 6.JPG ——> 7.JPG ,创建一个新工程项目,在项目路径中点击 8.JPG 找到我们刚才创建的“Turret”文件夹,并点选我们需要导入的包文件,然后点击 9.JPG 来创建一个新的工程文件。需要注意的是,以上步骤千万不能乱,因为Unity3D是无法以非空的文件夹作为工程文件夹来创建项目的。
在此为了节省时间,笔者直接使用刚才创建好的场景来进行示范。

第二步:制作一个炮塔模型。

打开3D MAX软件制作一个炮塔模型,并将制作好的模型保存在“Assets”【资源】文件夹下面。3D MAX中的模型样图如图8.1所示:
10.JPG
图8.1

第三步:将炮塔模型放入场景。

重新来到Unity3D的软件环境中,这时大家已经能在Project【项目文件栏】看到我们刚才用3D MAX导出的模型文件和材质贴图文件了。接着我们在地形场景中找到一个合适的位置,将我们的炮塔拖拽进去。如图8.2所示:
11.JPG

图8.2
但是我们发现,这样似乎太小了一点。在改变外部模型尺寸的时候,有一个技巧,您不必在场景中修改它。儿科一道该模型的属性面板中去修改它的“Scale Factor”大小。如图8.3所示:
12.JPG
图8.3
它的默认值都是0.01,我们在这里将它改为0.1,并在属性面板的最下方找到 13.JPG 按钮,点击它让模型尺寸在Unity3D中得到改变。如图8.4所示:
14.JPG
图8.4
怎么样,我们的炮台是不是雄壮了许多?但是,我们并不赞同这样的模型导入方法。因为根据官方的说法,他们建议您将做好的模型导出成为FBX格式的模型文件 给Unity3D使用。也许这样会使模型在Unity3D中的运行速度得以提高吧。所以说我们还是回到3D MAX的软件环境下面,将模型导出。

第四步:将炮塔模型导出。

在3D MAX中,点击File【文件】——>Export【导出】,将模型文件导出为FBX文件,保存到我们创建的文件夹中的“Assets”【资源】文 件夹下面。注意一下弹出的“FBX Export”面板,这里包含了模型动画、骨骼工具、材质等等一系列的导出设置。如果您没有在模型中添加这些东西,就需要将不必要的复选框勾选掉。
第五步:将炮塔模型再次放置到场景中。
回到Unity3D的软件环境,在Hierarchy【层次清单栏】中选中原先的炮塔模型,按下“Delete”键将其删除。然后在Project【项目 文件栏】中找到刚刚导入的FBX模型,点击选中,用前面修改模型尺寸的方法来修改FBX模型的尺寸。然后将其放置在场景中合适的位置上。于是从3D MAX中导出的模型就顺利的导入到Unity3D的场景中了。

没有更多推荐了,返回首页