Unity网页数据交互基本原理

1. u3d是一个3D游戏引擎由于和编辑器集成在一起 所以也可以理解为一个制作/开发平台
2. u3d使用javascript C#作为核心脚本语言 来驱动整个游戏引擎
3. 平台可以发布为Exe执行文件或者打包为供网页调用的一个独立的包文件
4. u3d制作的工程具有高度的可移植性 可以在ps xbox360 android iphone mac 等系统上运行

嵌入网页
1. 实现和Flash插入网页原理完全一致 使用ActiveX控件 嵌入在网页中 所以和Flash一样 需要安装一个播放器插件(<=3M)
                              


2. 如果察看页面源代码 则可以看到如下嵌入部分
<object id="UnityObject" classid="clsid:444785F1-DE89-4295-863A-D46C3A781394"width="600" height="450"codebase="http://webplayer.unity3d.com/download_webplayer/UnityWebPlayer.cab#version=2,0,0,0">
<param name="src" value="MyDataFile.unity3d" /><embed id="UnityEmbed" src="MyDataFile.unity3d" width="600" height="450"type="application/vnd.unity" pluginspage="http://www.unity3d.com/unity-web-player-2.x" /></object>
3. 和Flash一样 在浏览器中加载3d场景或者读取时的图标进度条等都能进行自定义 也可以自定义是否激活是用右键菜单

数据交互


1. 在unity3d中调用网页js函数
如我们在html中有脚本函数:

则在u3d中我们可以写函数来调用js函数如:
[pre]Application.ExternalCall( "SayHello", "The game says hello!" );[/pre]
2. 在unity3d中直接执行一段脚本代码(这也是可行的) 如:
[pre]Application.ExternalEval([/pre][pre] "if(document.location.host != 'unity3d.com') { document.location='http://unity3d.com'; }"
绿色部分是一个字符串 也是一段js脚本在u3d可以直接执行一段js脚本

3. 在js中调用unity3d函数(传递消息等)
假如在u3d中有一段功能函数(也是用js写的)
function MyFunction(param : String
{
Debug.Log(param);
}
则如果需要在js中呼叫这个函数可以这样写:

<script type="text/javascript" language="javascript">
<!--function SaySomethingToUnity(
document.getElementById("UnityContent").SendMessage("MyObject", "MyFunction", "Hello from a web page!");
-->
</script>

唯一要注意的是MyObject代表u3d中的一个物体名称为MyObject ,MyFunction是赋予给这个问题的函数,最后一个字符为传递的参数。如此可以实现调用和数据传递。


php,jsp?等的表单数据交互
这应该是今后会可能用到的主要方式 原理是利用form表单传递数据 php中已经使用过多次 没有问题 jsp中应该同理

php为例
U3d可以用向某个指定页面发送表单数据然后在php中使用_POST获取传递过来的表单数据
比如我们有一个网页: www.dreamloader.net/index.php
其页面源文件如下:
<?php
$action=$_POST["myform_action"];//定义一个变量$action用来获取页面传递过来的表单数据
if ($action!=””){echo$action;}//如果接受到了数据则打印出数据内容
?>

unity3d中我们发送数据的代码如下:
varform = newWWWForm();//定义一个网页表单form.AddField( "myform_action", "Action1" );//添加一个表单字段名称为myform_action内容是Action1
vardownload = newWWW( “www.dreamloader.net/index.php”, form );//发送表单数据到指定网址页面


假如index.php中执行的是数据库/统计操作 我们就可以对传递的数据进行保存读取或者其他操作了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

介绍一下UNITY3DWEB交互的方法,包含传入和传出。

通过web,url传入数值的方法:
var version : int = 1;

function CheckVersion ()
{
var update_url = "http://mysite.com/myGame/version.txt";
update_post = WWW(update_url);
yield update_post; //等待数据传递
if(update_post.error)
{
      print("URL输入错误: " + update_post.error);
}
else
{
      var latestVersion : int;
       //取得传入的值
       latestVersion = int.Parse(update_post.data);
      if (latestVersion > version)
      {
         //你的代码写在下面
      }
}
}



unity3d输出数据的方式如下,采用Application.ExternalCall,该方法只适合在web3d环境下使用。
该方法支持基本类型的传递和数组传递,任何类型都会转换成字符串类型使用。
例子代码://不待参数的调用函数 MyFunction1
Application.ExternalCall ("MyFunction1");

//调用函数MyFunction2,传递一个字符串
Application.ExternalCall ("MyFunction2", "Hello from Unity!");

//调用函数MyFunction3,传递混合参数
Application.ExternalCall ("MyFunction3", "one", 2, 3.0);

web中使用的函数,接受参数的能力。

<script language="JavaScript" type="text/javascript">
<!--
// arg是接受unity3d传递来的参数值
// web会弹出一个对话框来显示传入的参数值
function MyFunction2( arg )
{
alert( arg );
}

-->

</script>


以上是Unity3D引擎web3d环境中输入,输出数据的方法。希望对大家有帮助。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Unity网页播放器与浏览器进行交互

 


网页包含的Unity内容与网页之间基本是两类交互:
从网页向Unity内容调用函数
Unity内容网页调用函数
下面就详细说明这两种方式调用过程。
从网页向Unity内容调用函数
Unity Web Player的插件或ActiveX控件都有一个SendMessage()的方法,网页用这个方法与Unity进行沟通,这与Unity脚本接口里的 GameObject.SendMessage 极其类似。通过该函数可以传递对象名、函数名或简单参数,然后SendMessage()就会调用GameObject上给定的函数。
在调用SendMessage()之前,必须先得到Unity Web Player的引用。这里可以使用javascript 对象documentgetElementById()函数来获得该引用。下面是一个例子,他会执行SendMessage(),嵌入在Objectembed标签下的Unity web playeridUnityContent,方法会从一个名为 MyObject GameObject上的MyFunction() 函数,并传递一名话作为参数。

Unity内容里,你需要放置一个名叫MyObjectGameObject对象,并在该对象上附加实现了名MyFunction 方法的脚本文件。
function MyFunction(param : String)
{
Debug.Log(param);
}
Unity内容网页调用函数
Unity内容通过执行Application.ExternalCall()来调用任何在网页里定义Javascript函数,比如下面一句调用了网页里SayHello(),并传递了一句话作为参数。
Application.ExternalCall( "SayHello", "The game says hello!" );
在网页里需定义SayHello()方法,如下所示:

另一种从Unity里执行任意浏览器代码的方式
你甚至不用在所嵌入的网页定义函数,反而通过调用Application.ExternalEval()来执行内置在浏览器里的代码。
如下代码检查Unity内容是否访问自unity3d.com,如果不是重定向网页地址,这个技术可以用来防止深链接对该内容的访问。
Application.ExternalEval(
"if(document.location.host!='unity3d.com') { document.location='http://unity3d.com'; }"
);

 

这篇文章是写给公司网站开发小组看的  这里顺便分享一下

介绍:
1. u3d是一个3D游戏引擎由于和编辑器集成在一起 所以也可以理解为一个制作/开发平台
2. u3d使用javascript C#作为核心脚本语言 来驱动整个游戏引擎
3. 平台可以发布为Exe执行文件或者打包为供网页调用的一个独立的包文件
4. u3d制作的工程具有高度的可移植性 可以在ps xbox360 android iphone mac 等系统上运行

嵌入网页
1. 实现和Flash插入网页原理完全一致 使用ActiveX控件 嵌入在网页中 所以和Flash一样 需要安装一个播放器插件(<=3M)
                              


2. 如果察看页面源代码 则可以看到如下嵌入部分
<object id="UnityObject" classid="clsid:444785F1-DE89-4295-863A-D46C3A781394"width="600" height="450"codebase="http://webplayer.unity3d.com/download_webplayer/UnityWebPlayer.cab#version=2,0,0,0">
<param name="src" value="MyDataFile.unity3d" /><embed id="UnityEmbed" src="MyDataFile.unity3d" width="600" height="450"type="application/vnd.unity" pluginspage="http://www.unity3d.com/unity-web-player-2.x" /></object>
3. 和Flash一样 在浏览器中加载3d场景或者读取时的图标进度条等都能进行自定义 也可以自定义是否激活是用右键菜单

数据交互


1. 在unity3d中调用网页js函数
如我们在html中有脚本函数:

则在u3d中我们可以写函数来调用js函数如:
[pre]Application.ExternalCall( "SayHello", "The game says hello!" );[/pre]
2. 在unity3d中直接执行一段脚本代码(这也是可行的) 如:
[pre]Application.ExternalEval([/pre][pre] "if(document.location.host != 'unity3d.com') { document.location='http://unity3d.com'; }"
绿色部分是一个字符串 也是一段js脚本在u3d可以直接执行一段js脚本

3. 在js中调用unity3d函数(传递消息等)
假如在u3d中有一段功能函数(也是用js写的)
function MyFunction(param : String
{
Debug.Log(param);
}
则如果需要在js中呼叫这个函数可以这样写:

<script type="text/javascript" language="javascript">
<!--function SaySomethingToUnity(
document.getElementById("UnityContent").SendMessage("MyObject", "MyFunction", "Hello from a web page!");
-->
</script>

唯一要注意的是MyObject代表u3d中的一个物体名称为MyObject ,MyFunction是赋予给这个问题的函数,最后一个字符为传递的参数。如此可以实现调用和数据传递。


php,jsp?等的表单数据交互
这应该是今后会可能用到的主要方式 原理是利用form表单传递数据 php中已经使用过多次 没有问题 jsp中应该同理

php为例
U3d可以用向某个指定页面发送表单数据然后在php中使用_POST获取传递过来的表单数据
比如我们有一个网页: www.dreamloader.net/index.php
其页面源文件如下:
<?php
$action=$_POST["myform_action"];//定义一个变量$action用来获取页面传递过来的表单数据
if ($action!=””){echo$action;}//如果接受到了数据则打印出数据内容
?>

unity3d中我们发送数据的代码如下:
varform = newWWWForm();//定义一个网页表单form.AddField( "myform_action", "Action1" );//添加一个表单字段名称为myform_action内容是Action1
vardownload = newWWW( “www.dreamloader.net/index.php”, form );//发送表单数据到指定网址页面


假如index.php中执行的是数据库/统计操作 我们就可以对传递的数据进行保存读取或者其他操作了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

介绍一下UNITY3DWEB交互的方法,包含传入和传出。

通过web,url传入数值的方法:
var version : int = 1;

function CheckVersion ()
{
var update_url = "http://mysite.com/myGame/version.txt";
update_post = WWW(update_url);
yield update_post; //等待数据传递
if(update_post.error)
{
      print("URL输入错误: " + update_post.error);
}
else
{
      var latestVersion : int;
       //取得传入的值
       latestVersion = int.Parse(update_post.data);
      if (latestVersion > version)
      {
         //你的代码写在下面
      }
}
}



unity3d输出数据的方式如下,采用Application.ExternalCall,该方法只适合在web3d环境下使用。
该方法支持基本类型的传递和数组传递,任何类型都会转换成字符串类型使用。
例子代码://不待参数的调用函数 MyFunction1
Application.ExternalCall ("MyFunction1");

//调用函数MyFunction2,传递一个字符串
Application.ExternalCall ("MyFunction2", "Hello from Unity!");

//调用函数MyFunction3,传递混合参数
Application.ExternalCall ("MyFunction3", "one", 2, 3.0);

web中使用的函数,接受参数的能力。

<script language="JavaScript" type="text/javascript">
<!--
// arg是接受unity3d传递来的参数值
// web会弹出一个对话框来显示传入的参数值
function MyFunction2( arg )
{
alert( arg );
}

-->

</script>


以上是Unity3D引擎web3d环境中输入,输出数据的方法。希望对大家有帮助。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Unity网页播放器与浏览器进行交互

 


网页包含的Unity内容与网页之间基本是两类交互:
从网页向Unity内容调用函数
Unity内容网页调用函数
下面就详细说明这两种方式调用过程。
从网页向Unity内容调用函数
Unity Web Player的插件或ActiveX控件都有一个SendMessage()的方法,网页用这个方法与Unity进行沟通,这与Unity脚本接口里的 GameObject.SendMessage 极其类似。通过该函数可以传递对象名、函数名或简单参数,然后SendMessage()就会调用GameObject上给定的函数。
在调用SendMessage()之前,必须先得到Unity Web Player的引用。这里可以使用javascript 对象documentgetElementById()函数来获得该引用。下面是一个例子,他会执行SendMessage(),嵌入在Objectembed标签下的Unity web playeridUnityContent,方法会从一个名为 MyObject GameObject上的MyFunction() 函数,并传递一名话作为参数。

Unity内容里,你需要放置一个名叫MyObjectGameObject对象,并在该对象上附加实现了名MyFunction 方法的脚本文件。
function MyFunction(param : String)
{
Debug.Log(param);
}
Unity内容网页调用函数
Unity内容通过执行Application.ExternalCall()来调用任何在网页里定义Javascript函数,比如下面一句调用了网页里SayHello(),并传递了一句话作为参数。
Application.ExternalCall( "SayHello", "The game says hello!" );
在网页里需定义SayHello()方法,如下所示:

另一种从Unity里执行任意浏览器代码的方式
你甚至不用在所嵌入的网页定义函数,反而通过调用Application.ExternalEval()来执行内置在浏览器里的代码。
如下代码检查Unity内容是否访问自unity3d.com,如果不是重定向网页地址,这个技术可以用来防止深链接对该内容的访问。
Application.ExternalEval(
"if(document.location.host!='unity3d.com') { document.location='http://unity3d.com'; }"
);

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值