unity3d如何与外部通讯_unity3d 外部目录 - CSDN
  • Unity3D与Web之间的通信

    千次阅读 2014-06-27 17:26:39
    本示例利用U3D2.5中的Island Demo项目为例,加入代码,显示Unity3D与Web之间的通信方法。运行环境为Unity4D 4.0   1、Unity3D中设置 在U3D下建立空物体WebConnect,为其添加代码WebConnect.js 具体代码如下 ...


    本示例利用U3D2.5中的Island Demo项目为例,加入代码,显示Unity3D与Web之间的通信方法。运行环境为Unity4D 4.0

    由我的导师进行总结,很棒!

     

    1、Unity3D中设置

    在U3D下建立空物体WebConnect,为其添加代码WebConnect.js

    具体代码如下

    WebConnect.js

    //接收第一人称参数

    var fpc:GameObject;

     

    //从Web接收信息,设置当前相机

    function SelectCamera(index:int)

    {

           CameraSelect.currentCamera=index;

    }

     

    从Web接收信息,设置第一称位置

    function SetFpcPosition(posString:String)

    {

           var pos:String[]=posString.Split(char.Parse(","));

           var x:int=parseInt(pos[0]);

           var y:int=parseInt(pos[1]);

           var z:int=parseInt(pos[2]);

          

           fpc.transform.position=Vector3(x,y,z);

    }

     

    给FPC第一称移动时添加代码,向Web传递信息

    在第一人称的FPSWalker.JS代码添加下面代码,向Web发送当前位置信息

     

    function FixedUpdate()

    {

    ……

    Application.ExternalCall("ShowPosition",transform.position.x,transform.position.z);

    }

     

    2、Web设置

     

    主要代码如下

    Web.html

    Head头中添加脚本

    <script type="text/javascript">

                   function CameraSelect(camIndex)

                         {

                                u.getUnity().SendMessage("WebConnect","SelectCamera",camIndex);

                         }

                         function ShowPosition(x,z)

                         {

                                var pos=document.getElementById("position");

                                pos.innerHTML="当前位置,x="+x+",z="+z;

                         }

                         function SetFpcPosition(x,y,z)

                         {

                                u.getUnity().SendMessage("WebConnect","SetFpcPosition",x+","+y+","+z);

                         }

     </script>

    Body中Html控件

    <p class="header">我的海岛</p>

    <p><a href="#" οnclick="SetFpcPosition(500,200,500)">设置玩家位置</a></p>

    <p>请选择

              <select id="camselect" οnchange="CameraSelect(camselect.options.selectedIndex)">

                <option value=0 selected>主相机</option>

                <option value=1 >鸟群1</option>

                <option value=2 >鸟群2</option>                     

              </select>

    </p>

    <p>

            <div id="position">当前位置</div>

    </p>

     

     

    3、最后运行Web效果

    展开全文
  • unity3d的socket通信,有人会做吗?这两天做一个场景,需要用外部程序提供的数据来驱动场景,有没有大神会做呀?
  • unity3d通信

    2020-07-30 23:32:14
    unity3d 5x以前,可以用NetworkView.RPC的方式进行通信。5x,之后,虽然还可以用networkview建立服务器和客户端,但是NetworkView.RPC的通信方式被取消了。 这里使用的是unity3d 5x中,Networking下的NetworkServer...
  • 这篇文章主要讲的是如何使用Android Studio与Unity的交互通信。主要内容有如何在Android Studio创建工程,如何设置,以及如何导出。以及在Unity调用Android的方法。 二、参考资料 Unity与Android通信 ...

    一、前言

    这篇文章主要讲的是如何使用Android Studio与Unity的交互通信。主要内容有如何在Android Studio创建工程,如何设置,以及如何导出。以及在Unity调用Android的方法。

    二、参考资料

    1. Unity与Android通信 https://blog.csdn.net/qq_33747722/article/details/53390198
    2. Unity和Android相互通信 https://blog.csdn.net/qq_15267341/article/details/51961665
    3. [Unity][安卓]Unity和Android Studio 3.0 交互通讯(1)Android Studio 3.0 设置 https://blog.csdn.net/bulademian/article/details/78387461

    三、目录

    • 新建Android项目
    • 新建Android模板Module
    • 导入加载jar文件
    • 修改AndroidMainfest.xml文件
    • 修改MainActivity文件
    • 编译构建项目
    • 导入Unity
    • Unity调用Android项目方法

    四、正文

    1、新建Android项目

    Fiele->New->New Project在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    点击 FINISH 按钮,新建工程。
    在这里插入图片描述

    2、新建Android模板Module

    右键项目 New->Module
    在这里插入图片描述
    选择Android Library
    在这里插入图片描述
    这个地方可以设置模块的名字
    在这里插入图片描述
    点击Finsh就可以了
    在这里插入图片描述
    如果不小心写错模块名字了,想删除了,就右键 Open Module Settings
    在这里插入图片描述
    删除就行了
    在这里插入图片描述

    3、导入加载外部jar文件

    这个有三种加载外部jar文件的方法,这边只采用第一种,剩余方法可以参考我另一篇文章。
    【Android Studio】导入外部jar包【https://blog.csdn.net/q764424567/article/details/85231151】
    切换到Project视图
    在这里插入图片描述
    找到libs文件夹
    在这里插入图片描述
    将你自己要使用的jar包拖进去(复制粘贴也行)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    右击Jar文件,点击Add As Library后,在出现的弹出框点击确定即可
    在这里插入图片描述
    添加成功
    导入成功的jar包
    在这里插入图片描述
    打开build.gradle文件,可以看到最后一行添加成功的代码
    在这里插入图片描述
    在这里插入图片描述

    4、将Unity的classes.jar加载到项目中去

    classes.jar这个文件,直接可以在Unity的安装目录中搜索,找到之后复制粘贴到项目的libs文件中
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    OK了
    在这里插入图片描述

    5、 新建MainActivity

    切换到Android视图,然后展开unity_exchange->java->右键第一个文件夹
    在这里插入图片描述
    在这里插入图片描述
    不做任何 处理,点击 FINISH 按钮后。

    就新建了MainActivity ,右边是初始脚本。
    在这里插入图片描述

    6、修改AndroidMainfest.xml文件

    1.先把unity_exchange下面res文件夹中的layout下面的activity_main_xml删除
    在这里插入图片描述
    如果有报错
    在这里插入图片描述
    就把MainActivity.java脚本中的
    在这里插入图片描述
    这一行注释掉

    2.修改unity_exchange目录下的mainfests文件中的AndroidManifest.xml

    打开app目录下的manifests文件夹中的AndroidManifest.xml
    在这里插入图片描述
    复制这一段代码
    在这里插入图片描述
    粘贴到unity_exchange->manifest->AndroidManifest.xml
    在这里插入图片描述

    7、修改MainActivity文件

    在这里插入图片描述
    在这里插入图片描述
    这个时候,如下所示。
    在这里插入图片描述
    改为如下所示。
    在这里插入图片描述
    下面就是在Android中编写Unity要调用的方法了,例如我这里只写一个简单的两数求和的方法:
    在这里插入图片描述
    在这里插入图片描述

    8、编译构建项

    1.编译
    选中 unity_exchange 点击build – Make Module ‘unityexchange’
    在这里插入图片描述
    等待一下,就会显示如下所示。如果没有,就重新试几次。
    在这里插入图片描述
    使用 Build – Make Project 或者 Build – Rebuild Project 重新编译工程。
    切換到Project视图,可以看到build文件中有一个packaged-classes文件夹,不同版本的Android Stuido可能文件夹名字不一样,百度一下就知道了
    在这里插入图片描述
    右键show in explorer,打开文件夹到当前目录
    在这里插入图片描述
    2.把classes.jar移动到libs文件夹中
    在这里插入图片描述
    3.将AndroidManifest.xml和res文件夹,复制到这个文件夹中
    AndroidManifest.xml在
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    9、导入Unity

    新建Unity工程
    在工程目录创建Plugins->Android
    然后将上图中的3个文件复制过来
    在这里插入图片描述

    10、Unity调用Android项目方法

    1.新建test1.cs挂载在Main Camera上面
    在这里插入图片描述
    2.编写代码

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class test1 : MonoBehaviour
    {
        private Transform cantrans;//Canvas
        private Text text;//text
        private Button button;//按钮
        private AndroidJavaObject jo = null;
        private InputField input1;
        private InputField input2;
        
        void Start()
        {
            //固定写法
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            cantrans = GameObject.Find("Canvas").transform;
            text = cantrans.Find("Text").GetComponent<Text>();
            button = cantrans.Find("Button").GetComponent<Button>();
            input1 = cantrans.Find("InputField").GetComponent<InputField>();
            input2 = cantrans.Find("InputField2").GetComponent<InputField>();
            button.onClick.AddListener(OnClick);
        }
    
        //按钮方法
        public void OnClick()
        {
            text.text = "";
            int res = jo.Call<int>("Add", int.Parse(input1.text), int.Parse(input2.text));
            text.text = res.ToString();
        }
    }
    
    

    3.制作UI
    在这里插入图片描述
    4.打包发布

    复制AndroidManifest.xml中这一行代码
    在这里插入图片描述
    粘贴到这里
    在这里插入图片描述
    发布,运行

    展开全文
  • 1.使用Unity3d内置的Network方法,采用RPC(远程过程调用)的方式来进行网络编程,优点是方便,最多支持32个用户连接,适合做休闲的“开房间”类型游戏,类似泡泡堂之类;Unity3d官方论坛有一个master用来做大厅分发...

    转载:https://zhidao.baidu.com/question/1175392434287503859.html


    1.使用Unity3d内置的Network方法,采用RPC(远程过程调用)的方式来进行网络编程,优点是方便,最多支持32个用户连接,适合做休闲的“开房间”类型游戏,类似泡泡堂之类;Unity3d官方论坛有一个master用来做大厅分发服务器采用Raknet,效率还不错,不过就是很多功能待完善,如果你自己对C++比较了解的可以自己开发。


    2.使用第三方的网络服务器构件,比如smartFox(java开发基于,flash xml socket),netDog(c++)等等,他们有对应Unity的api,可以支持大规模人数在线。


    3.Unity3d 支持 插件开发,你可以自己开发自己的dll(动态链接库),然后支持你想要的网络功能,甚至说如果你可以支持目前市面所有的网络游戏服务器,不过,前提是你有他们的通信协议,呵呵,不然就的自己开发。


    4.对于小规模的网络IO,你还可以查看WWW这个对象,用HTTP协议来通信。
    展开全文
  • unity3d与web网页通信

    2019-01-04 20:58:05
    Unity3D 中的 C# 和 JavaScript 脚本之间是可以互相访问并交互的,但是要求这些被访问和操作的 C# 和 JavaScript 组件必须放在名为 Standard Assets 或者 Plugins 目录下,这样保证被访问和操作的组件是第一时间被...

    总结一下:

    1. Unity3D 中的 C# 和 JavaScript 脚本之间是可以互相访问并交互的,但是要求这些被访问和操作的 C# 和 JavaScript 组件必须放在名为 Standard Assets 或者 Plugins 目录下,这样保证被访问和操作的组件是第一时间被编译的,那么在这两个目录之外的其它脚本就可以随意使用它们了,同时呢,我们不要被 MonoDevelop 的一些表现给唬住;
    2. Blur 组件不生效的原因在于 Shader 资源没有被打包到执行程序中,而并不是其它别的原因,所以打蛇要打七寸就是这个道理。

     

    Application.ExternalCall 外部调用

     

    static function ExternalCall (functionName : string, params args : object[]) : void

    Description描述

    Calls a function in the containing web page (Web Player only).

    调用一个包含在网页中的函数(只用于Web Player)。

    This will call JavaScript function functionName in the web page that contains the web player, passing given arguments to it. Supported argument types are the primitive types (string, int, float, char) and arrays of them. Any other objects are converted to string (using ToString method) and passed as strings.

    调用包含在网页中名为functionNameJavaScript函数,并传递给定的参数。支持原始的数据类型(string, int, float, char)和这些类型的数字。如何其他的对象被转化为字符串(使用ToString方法)并作为字符串传递。

    The function is called non-blocking, i.e. ExternalCall immediately returns without waiting for the function that was called to complete.

    这个函数调用时不会被阻塞,即ExternalCall立即返回的功能而不必等待被完成。

    The number of passed arguments can be varying:

    传递的参数数量是可变的。

    // Calls MyFunction1 in web page with no arguments
    // 调用网页上的MyFunction1并不使用参数。
    Application.ExternalCall ("MyFunction1");
    
    // Calls MyFunction2 in web page with a string
    //调用网页上的MyFunction2并使用字符串参数。
    Application.ExternalCall ("MyFunction2", "Hello from Unity!");
    
    // Calls MyFunction3 in web page with several arguments of different types
    //调用网页上的MyFunction3并使用几个不同类型的参数。
    Application.ExternalCall ("MyFunction3", "one", 2, 3.0);
    

    The functions to be called are just declared in the HTML page using standard syntax, for example:
    被调用的在HTML中的函数只需要使用标准的语法即可,例如:

    <script language="JavaScript" type="text/javascript">
    <!--  
    // Using the above call from Unity, this will   receive
    // 使用来自Unity的调用,这将接受
    // "Hello from Unity!" as the argument.
    // "Hello from Unity!" 做为参数
    function MyFunction2( arg )
    	{
    		alert( arg );
    	}
    -->
    </script>


    Application.ExternalEval 外部运行

     

    static function ExternalEval (script : string) : void

    Description描述

    Evaluates script snippet in the containing web page (Web Player only).

    调用包含在网页中的片段脚本函数(只用于Web Player)。

    This will execute JavaScript snippet script in the web page that contains the web player.

    这将执行包含在网页中JavaScript片段script

    // Navigates to the previous page
    //返回前一页
    Application.ExternalEval ("history.back()");

    --------------------------------------------------------------

        

    unity3D初入1 javaScript 和 C# 互相调用

    using UnityEngine;
    using System.Collections;

    unity3D初入1 javaScript 和 C  互相调用 - 博者 - 记忆空间public class test2: MonoBehaviour {

        void OnGUI()
    unity3D初入1 javaScript 和 C  互相调用 - 博者 - 记忆空间    {
            if(GUI.Button(new Rect(25,70,100,30), "CS Call JS"))
    unity3D初入1 javaScript 和 C  互相调用 - 博者 - 记忆空间        {
                test1 c = (test1)gameObject.GetComponent("test1");
                c.testPrint();
            }
        }

        void PrintTest()
    unity3D初入1 javaScript 和 C  互相调用 - 博者 - 记忆空间    {
            print("JS Call CS");
        }
    }



    function OnGUI()
    unity3D初入1 javaScript 和 C  互相调用 - 博者 - 记忆空间{    
        if(GUI.Button(Rect(25,25,100,30),"JS Call CS" ))
    unity3D初入1 javaScript 和 C  互相调用 - 博者 - 记忆空间    {
            var c = gameObject.GetComponent("test2");
            c.PrintTest();
        }
    }

    function testPrint()
    unity3D初入1 javaScript 和 C  互相调用 - 博者 - 记忆空间{
        print("CS Call JS");
    }
     
    展开全文
  • unity3D视景显示的数据传输通道建立matlab与unity3D传输数据matlab客户端建立unity3D服务器端建立简单版的开始了总结和可能的后续 matlab与unity3D传输数据 参考了很多代码,甚至有的一点都没有改,向各位大佬表示...
  • Unity3d笔试题大全

    千次阅读 2018-01-06 16:36:58
    Unity3d笔试题大全 1. [C#语言基础]请简述拆箱和装箱。 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程。 1.在堆中开辟内存空间。 2.将值类型的数据复制到堆中。 3.返回堆...
  • Unity3D中一些脚本的方法只能用在JS中,在C#中是无效的,而C#可以服务器端通讯,JS本身却不行。而且,如果需要用到js调用c#的问题,js会比c#先编译,所以在mac里编译ios的时候会出错,提示为无法找到那个C#类。...
  • Unity3d底层数据传递分析

    千次阅读 2019-07-05 10:10:57
    作者:樊松阳,腾讯游戏客户端开发 高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。 ...内存方面,介绍了什么是封送,以及类和结构体的关系和区别。一、托管交互(Interop)在M...
  • Unity串口通信的unityPackage包,可以在外部修改COM口,下载后直接拖拽导入到你的工程当中就好,关于串口通信的文档我也发布了,可以去查看。
  • [转]iOS版与Unity3d交互

    2018-01-09 19:56:25
    最近在实验室做了一个项目,用到了蓝牙通讯和U3D的交互,都有很多坑,如:IOS与Unity3D界面之间的跳转,数据的传递等操作过程其实不是很难,只是比较繁琐,刚开始可能一头雾水,慢慢学习了解后,就会发现其实很简单...
  • 原文地址:http://www.omuying.com/article/151.aspx做游戏,基本上都避免不了服务器端交互,服务器端交互的方式也有几种,总结起来就是长连接模式(Socket)短链接模式(Http),由于通常都是使用 Http 这种...
  • 今天博主想和大家分享的是在Unity3D中基于订阅者模式实现消息传递机制,我们知道Unity3D中默认提供了一种消息传递机制SendMessage,虽然SendMessage使用起来的确非常简单,可是它的这种简单是建立在付出一定的代价的...
  • Unity3D使用腾讯广点通广告

    千次阅读 2016-05-10 09:55:35
    Unity3D使用腾讯广点通广告很多做Android开发、游戏开发的朋友找我咨询,开发的应用、游戏如何赚钱,今天我分享下我的经验吧。App想在国内赚钱,“软件收费”是基本上做不起来的,大家都懂,没什么好说的。那么比较...
  • 发送端:  调用Send()方法,传递发送的内容。 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net; using System.Net.Sockets; using System.Text;......
  • unity进程间通信

    千次阅读 2017-12-16 22:20:46
  • 本资源实现了Unity客户端服务器端的互传消息,可以用于实现移动端对PC端的控制等
  • 下面我们开始今天的Unity3D游戏开发技能培训。 我们专业培养”游戏主程”,挑战20W年薪,初期学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D、3D小规模游戏及网页游戏...
  • Unity支持20多种平台听起来好像很厉害,可是稍微接触了才发现其实有很多大坑。最近因为项目需要接触了WebGL,其中还要连接SQL数据库,原本以为只需要发布为WebGL即可,结果问题很多,问题如下: 1.发布项目时报错...
1 2 3 4 5 ... 16
收藏数 312
精华内容 124
关键字:

unity3d如何与外部通讯