精华内容
下载资源
问答
  • Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等...也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac 所支持。
  • Unity中再andoird平台下打开web网页有个插件叫UiWebView可以实现,然而我们也自己手动实现,我参照了一些网上的博客,网上的大部分的做法是把这个功能在android下做好后作为一个jar导入到Unity中进行使用,我的做法...

    Unity中再andoird平台下打开web网页有个插件叫UiWebView可以实现,然而我们也自己手动实现,我参照了一些网上的博客,网上的大部分的做法是把这个功能在android下做好后作为一个jar导入到Unity中进行使用,而我们整个流程是恰恰相反的,我们先导出一个android工程后,再在android studio中打包。本文的许多代码参照https://www.xuanyusong.com/archives/1418,感谢大佬写下的代码,让我可以借鉴。
    首先新建一个工程,然后创建一个button,然后给button创建一个点击事件

    public class Test : MonoBehaviour
    {
     public Button btn;
     // Start is called before the first frame update
     void Start()
       {
         AndroidJavaClass aj= new AndroidJavaClass("com.unity3d.player.UnityPlayer");
         AndroidJavaObject p= aj.GetStatic<AndroidJavaObject>("currentActivity");
         btn.onClick.AddListener(() =>
         {
             Debug.Log("按钮点击");
             p.Call("openWebView");
         });
        }
    }
    

    其实就是点击按钮然后调用android的方法,然后打开web页面。然后直接导出一个android工程。具体打包或者导出android工程设置不在赘述,不懂的朋友多去查阅。
    在这里插入图片描述
    之后我们便需要在android中开始操作了,首先创建类WebViewActivity的页面,内容代码如下

    package com.unity3d.player;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.webkit.WebView;
    import android.widget.Button;
    public class WebViewActivity extends Activity{ 
    private WebView webView;
    private Button close;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.main);
    
        webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("http://www.baidu.com/");
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
    
        close = (Button) findViewById(R.id.button);
        close.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                WebViewActivity.this.finish();
    
            }
        });
    }
    private class WebViewClient extends android.webkit.WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //这里实现的目标是在网页中继续点开一个新链接,还是停留在当前程序中
            view.loadUrl(url);
            return super.shouldOverrideUrlLoading(view, url);
    
        }
    }
    
    }
    

    然后创建xml页面布局main.xml,这个文件的位置要在res/layout下,内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    
    
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
        <WebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        />
        <Button
        android:id="@+id/button"
        android:text="关闭网页"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        </LinearLayout>
    

    我们还需要在AndroidManifest中配置一下

    <activity android:name=".WebViewActivity">
    <!-- 连接互联网的权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    

    有网络权限的无须在配置,最后我们就可以在启动类UnityPlayerActivity中使用了,
    代码如下

    import android.content.Context;
    
    public class UnityPlayerActivity extends Activity implements IUnityPlayerLifecycleEvents{
    protected UnityPlayer mUnityPlayer; 
    Context mContext = null;
    @Override protected void onCreate(Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        mContext = this;
        String cmdLine = updateUnityCommandLineArguments(getIntent().getStringExtra("unity"));
        getIntent().putExtra("unity", cmdLine);
          mUnityPlayer = new UnityPlayer(this, this);
        setContentView(mUnityPlayer);
        mUnityPlayer.requestFocus();    
    }
    //打开页面在unity中需要调用的方法
    public void openWebView(){
        Intent intent = new Intent(mContext,WebViewActivity.class);
        this.startActivity(intent);
    }
    ....剩余代码部分没变省略
    
    }
    

    最后我们可以在android sutio中build一个apk看下效果,还有一点需要注意的是每次重新导出android工程后manifest文件和启动类都会重置,不过网上也有解决办法,请自行查看,最后奉上我的效果:
    启动效果如下:

    在这里插入图片描述

    点击后效果如下:
    在这里插入图片描述

    展开全文
  • Android下的Unity的webview插件,比原生的webview好用
  • 可以在unity中直接调用该插件,然后调用android原生摄像机功能,解决了android7.0的权限问题
  • unity使用webcam调用移动端摄像头适配安卓和ios 源码和安卓apk
  • unity通过访问原生的webview来访问网站,达到内嵌网页的效果.
  • Unity发布Web之支持手机端

    千次阅读 2019-09-21 15:22:54
    相信有许多人和小黑一样,遇到Unity发布WebGL后,需要在在手机浏览器上运行起来,所以我要把它分享出来,帮助大家!!!!!

    Unity发布Web之支持手机端

    需求:

    ___ 相信有许多人和小黑一样,会遇到各种各样的难题,这其中就有,Unity发布Web后,在手机浏览器上可运行!!!!!

    分析:

    为什么会有相关的需求被提出呢? 最大的一个原因:想在手机浏览器中看到3D产物!还有就是一些软件需要对接;

    就像小黑最近刚完成的一个对接:与React Native对接,以下简称:RN
    小黑用的Unity版本为:5.6.1

    前言

    • 一开始的时候,与对方工作人员进行Unity与IOS和Android原生交互,虽说成功了,不过因为包体有些大,最终这条方案被甲方技术Pass掉了。只好换路而行!
    • 于是有了Unity发布为Web,然后对方通过RN软件的webView组件访问该web链接。这样子就能把3D产物在他们的软件中显示出来了。
    • 于是一场没有"硝烟的战争"开始了

    开始

    一、先发布,后修改

    1:发布WebGL

    在Build面板选择WebGL,然后在Inspector面板中选择Publishing Settings,因为最终是要在手机浏览器上边使用,所以WebGL Memory Size需要把默认值设置为128,或者更低;
    发布web的设置

    2:打开发布文件夹

    然后打开Build文件夹,我们会看到UnityLoader.js文件,使用**Notepad++**打开它,也可以使用记事本或者写字板打开;然后把下图所出现的红框框选代码替换为:

    UnityLoader.SystemInfo.hasWebGL?UnityLoader.SystemInfo.mobile?t():["Firefox","Chrome","Safari"].indexOf(UnityLoader.SystemInfo.browser)==-1?t():t():e.popup("Your browser does not support WebGL",[{text:"OK",callback:r}])

    该被替换掉的代码替换后,内容为如下图红框框选位置:
    替换完代码后的文件
    然后我们保存,关闭。

    3:放到服务器上边然后,通过连接访问

    因为是小测试,所以我放到自己搭建的服务器上了。对于一会儿出现的图。。。。请接受我的懒惰,用了和客户对接测试的项目,马赛克很强大!
    这是手机上的图片
    铛铛铛铛,出现啦。一个可旋转的3D物体在手机上出现了;

    二、先修改,在发布

    1:编写代码

    请大家原谅小黑的懒,?还是在原项目上进行的。
    上代码:
    该脚本需要放到Editor文件夹下,切记!!!

    using System;
    using System.IO;
    using System.Text.RegularExpressions;
    using UnityEditor;
    using UnityEditor.Callbacks;
    public class PostBuildActions
    {
    [PostProcessBuild]
        public static void OnPostProcessBuild(BuildTarget target, string targetPath)
        {
            if (target != BuildTarget.WebGL)
                return;
                var path = Path.Combine(targetPath, "Build/UnityLoader.js");
            var text = File.ReadAllText(path);
            text = text.Replace("UnityLoader.SystemInfo.mobile", "false");
            text = text.Replace("[\"Edge\", \"Firefox\", \"Chrome\", \"Safari\"].indexOf(UnityLoader.SystemInfo.browser) == -1", "false");
            File.WriteAllText(path, text);
        }
    }

    2:发布WebGL

    接着还是老套路,发布~~ ~

    3:在手机浏览器上通过URL链接访问

    卡布达~ , 出现吧! 这样子的小黑好怪异的感觉

    不过项目在手机浏览器上还是跑起来了,大家看结果嘛!
    手机浏览器上打开后

    查看官网

    为什么我们要做这些

    因为官网给出:

    • 注意,Unity WebGL内容目前不支持移动设备。它可能仍然可以工作,特别是在高端设备上,但目前的许多设备功能不够强大,也没有足够的内存来支持Unity WebGL的内容。由于这个原因,Unity WebGL在尝试在移动浏览器上加载内容时显示了一条警告消息(如果需要,可以禁用它)。
    • 在这里插入图片描述
      官网说明这边走

    好了,今天的知识就分享到这里了

    小伙伴,你们get到了么?

    接下来我又要分享一些知识了!

    分享完毕!

    程序的道路上学习永不停止,探索随时进行。
    Let’s go. Just do it. We can.

    马上国庆节了,先祝小伙伴们国庆节快乐,技术多多长进然后给小黑讲解?
    祝我们华锐视点生意兴隆,财源滚滚,越来越好?!最后也祝我们的祖国越发强大?,毕竟我爱她。

    展开全文
  • Android Google登录Unity插件 总览 该插件可在Unity中公开Goog​​le登录API。 专门用于需要OAuth ID令牌或服务器身份验证代码的Unity项目。 仅支持Android版本。 有关更多信息,请参见。 在API控制台上配置应用...
  • Unity Web前端研究

    万次阅读 2012-01-14 16:49:23
    Unity3D 3.4.1 MB525defy Android 2.2.1  羽化的第二十五篇博客,明天就要启程回家了,所以这应该是本月的最后一篇博客。最近工作还算顺利,只是临近春节放假,大家貌似都很轻松,春节过后杰哥就要离职到别...

    开发环境

    Window7

    Unity3D  3.4.1

    MB525defy Android 2.2.1

            羽化的第二十五篇博客,明天就要启程回家了,所以这应该是本月的最后一篇博客。最近工作还算顺利,只是临近春节放假,大家貌似都很轻松,春节过后杰哥就要离职到别的公司,是羽化在公司唯一的机友,生活方面得到很多照顾,希望杰哥新的一年能工作顺利,万事开心~ ~前几天突然翻起了《灌篮高手》漫画来看,个性鲜明的人物和幽默精彩的故事给我们童年留下很多回忆,再翻来看很自然的融入故事之中,感动很多。最近翻了《索尼克世代》和《天使之王》,前者是曾经和马里奥并驾齐驱的王者,后者是游戏制作的又一次颠覆。天使之王在游戏中无UI概念,基本上和暴雨类似,羽化个人很喜欢这种设计,UI做得越简洁游戏代入感越强,看看PS3的暴雨就知道,交互式电影的手法,扣人心悬的故事,玩起来就是种享受。索尼克系列羽化原来基本没玩过,这作应该算是历代的翻版,,速度感一直是系列的主题,关卡设计十分巧妙,可以一直飞速过关,可玩度极高,这次特效做的相当棒,话说世嘉做游戏感觉真的越来越好了。

    这次是羽化最近看Web版的一些心得,很多脚本来自帮助文档,送上一个自己用的小工具脚本,可以在运行时保存和自动保存,最后送上一首《王国之心385/2》版的《Dearly Beloved》

     

    本次学习:

    1.  Unity Web版

    2.  发布的HTML解析

    3.  Unity与网页通信

    4.  附送Unity编辑模式下自动保存和运行保存小插件


    1.Unity Web版

    Unity网页版其实有两种,一种是需要Unity插件支持,另一种是即将到来的Unity3.5 Flash版,虽然羽化对Flash方面不是很了解,但也知道Flash从一个开发者角度上来看,是个成功又失败的作品,最近的网页发展趋势也在慢慢脱离Flash,这些只是羽化个人的一些看法,所以不对Flash版抱有太大幻想,所以开始看第一种方式,由于是网页版,必须要通过下载的方式获取资源,这里就会面临两个问题:

    1.缓存50M限制:网页版打包一般用AssetBundle,用WWW方法下载,如果你开发的是个小型网页游戏,那么缓存就不是问题,但如果开发的是个大型MMO网游,这个就要考虑一下了, WWW.LoadFromCacheOrDownload是Unity自带的下载写缓存方式,意味着不能通过此方法下载累计超过50M的缓存,但羽化测试结果还不能肯定这么一种说法,所以这里要等游戏放在外部网络的时候在看看,还有一种解决方法就是在Unity官方购买缓存权限,但价格不菲。。。至少个人无法承担。

    2.插件本地下载:很多情况下用户并没有Unity Web Player插件,而且这个插件有两种版本,一个是最小版,大概400KB左右,一个是完全版,大概5M左右,前一个版本下载后自动下载后一个版本,所以羽化认为还不如直接下载完全版- - 对于网页游戏来说最不能做的就是让用户等和复杂的安装手段,所以这5M完全版必须想办法放在一个良好的服务器端下载,而不是Unity官网。。。安装最好自动安装,而不是手动安装。。。


    2.发布的HTML解析

    在Build Settings里面的切换成Web Player后几个勾选作用在帮助文档里面有说明,羽化就不多说,Player Settings里面WebPlayer Template下是网页HTML的打包选择,当然也可以选择用代码打包,但每次修改比较麻烦,这里默认只给了三个选项,可以在Unity\Editor\Data\Resources\WebPlayerTemplates目录下添加自己喜欢的HTML设置,这里可以看到羽化添加的一个设置,具体方法可以看Manual里面的Web Player Deployment

    羽化把这个也放在了下载包YUHUA文件夹里面,我们主要看代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    	<head>
    		<title>Unity Web Player | %UNITY_WEB_NAME%</title>
    		<script type="text/javascript" src="UnityObject.js"></script>
    		<script type="text/javascript">
    		<!--
    		if (typeof unityObject != "undefined")
    		{
    			var params = 
    			{
    				disableContextMenu: true
    			};
    			
    			unityObject.enableClickOnceInstall(true);
    			unityObject.enableFullInstall(true);
    			unityObject.enableGoogleAnalytics(false);
    			unityObject.enableJavaInstall(false);
    			unityObject.enableAutoInstall(false);
    			
    			if(!checkPlugins("UnityWebPlayer", ""))
    			{
    				DownLoad();
    			}
    			
    			unityObject.embedUnity("unityPlayer", "%UNITY_WEB_PATH%", %UNITY_WIDTH%, %UNITY_HEIGHT%, params,null,function(result) 
    			{
                    if (result.success) 
    				{
    					var unity = result.ref;
    					var version = unity.GetUnityVersion("3.x.x");
    					if(version != "3.4.2f3") 
    					{
    						alert("Unity Web Player Not New!!" + "\nNow: " + version +  "\nNew: 3.4.2f3");	
    					}
    					
                        var versionButton = document.getElementById("versionButton");
                        versionButton.disabled = false;
    					var sendButton = document.getElementById("sendButton");
    					sendButton.disabled = false;
                    }
    				else 
    				{
    					alert("Not Install Unity Web Player!"); 
    				}
                });
    			%UNITY_SET_BASE_DOWNLOAD_URL%
    		}
    		
    		function checkPlugins(pluginsName, activexObjectName)
    		{
    			if (activexObjectName == "") activexObjectName = pluginsName + "." + pluginsName;
    		   
    			var np = navigator.plugins;
    			// FF
    			if (np && np.length) 
    			{
    				for(var i = 0; i < np.length; i ++) 
    				{
    					if(np[i].name.indexOf(pluginsName) != -1) 
    					return true;
    				}
    				return false;
    			}
    			// IE
    			else if (window.ActiveXObject) 
    			{
    				try 
    				{
    					var axobj = eval("new ActiveXObject(activexObjectName);");
    					return axobj ? true : false;
    				} 
    				catch (e) 
    				{
    					return false;
    				}
    			} 
    			else 
    			{
    				return false;
    			}
    		}
    		
    		function DownLoad() 
    		{
    			run_exe="<OBJECT ID=\"RUNIT\" WIDTH=0 HEIGHT=0 TYPE=\"application/x-oleobject\""
    			run_exe+="CODEBASE=\"UnityWebPlayerFull.exe\">"
    			run_exe+="</OBJECT>" 			
    			
    			document.open();
    			document.clear();
    			document.writeln(run_exe);
    			document.close();
    		}
    		
    		function versionButtonClick() 
    		{
                var unity = unityObject.getObjectById("unityPlayer");
                var version = unity.GetUnityVersion("3.x.x");
                alert(version);
            }
    		
    		function sendButtonClick() 
    		{
    			var unity = unityObject.getObjectById("unityPlayer");
    			unity.SendMessage("GT", "GT", "Hello from Web!");
    		}
    		
    		function UnitySend( arg )
    		{
    			alert( arg );
    		}
    		-->
    		</script>
    		<style type="text/css">
    		<!--
    		body {
    			font-family: Helvetica, Verdana, Arial, sans-serif;
    			background-color: white;
    			color: black;
    			text-align: center;
    		}
    		a:link, a:visited {
    			color: #000;
    		}
    		a:active, a:hover {
    			color: #666;
    		}
    		p.header {
    			font-size: small;
    		}
    		p.header span {
    			font-weight: bold;
    		}
    		p.footer {
    			font-size: x-small;
    		}
    		div.content {
    			margin: auto;
    			width: %UNITY_WIDTH%px;
    		}
    		div.missing {
    			margin: auto;
    			position: relative;
    			top: 50%;
    			width: 193px;
    		}
    		div.missing a {
    			height: 63px;
    			position: relative;
    			top: -31px;
    		}
    		div.missing img {
    			border-width: 0px;
    		}
    		div#unityPlayer {
    			cursor: default;
    			height: %UNITY_HEIGHT%px;
    			width: %UNITY_WIDTH%px;
    		}
    		-->
    		</style>
    	</head>
    	<body>
    		<p class="header"><span>Unity Web Player | </span>%UNITY_WEB_NAME%</p>%UNITY_BETA_WARNING%
    		<div class="content">
    			<div id="unityPlayer">
    				<div class="missing">
    					<a href="http://unity3d.com/webplayer/" title="Unity Web Player. Install now!">
    						<img alt="Unity Web Player. Install now!" src="getunity.png" width="193" height="63" />
    					</a>
    				</div>
    			</div>
    		</div>
    		<p><input id="versionButton" type="button" value="Version" disabled="disabled" οnclick="versionButtonClick();" /></p>
    		<p><input id="sendButton" type="button" value="Send" disabled="disabled" οnclick="sendButtonClick();" /></p>
    		<p class="footer">« created with <a href="http://unity3d.com/unity/" title="Go to unity3d.com">Unity</a> »</p>
    	</body>
    </html>

    这是羽化改版要对应原版的来看,可以发现打开网页的时候,都会申请去官网下载最新的UnityObject.js,羽化把这个文件放在了本地,并做了一些修改,这样每次部分图片资源都会从本地得到,这个js脚本是Web端的核心,所以官方警告最好不要做修改,但我们是程序员,一般不怕警告。。。下面的UnityObject的方法调用,决定了Unity Web Player的运行状态,具体解释可以看帮助文档,羽化擅自添加了两个功能,一是与Unity通信,可以看到就是一个简单的SendMessage,二是提示下载插件,这也算自动安装的一种,但不算很智能,考虑到浏览器的差异,羽化做了一个决定,把自动安装自动下载放到Unity官方去做因为这部分需要解析一个官方的jar文件包暂时无法修改,我们只负责插件提示下载本地化,于是下面的版本检查就产生了,代码上还有部分缺陷,对应IE内核的浏览器没有问题,但火狐和Chrome不支持自动安装,只能本地下载。具体的网页包羽化放在下载的WebPlayer里面。


    3. Unity与网页通信

    打开WebTest项目里面的脚本GT.js
    function Awake()
    {
    	Application.runInBackground = true;
    }
    
    function GT(param : String)
    {
        transform.guiText.text = param;
    }
    
    function Update()
    {
    	Camera.main.transform.RotateAround (Vector3.zero, Vector3.up, 20 * Time.deltaTime);
    }
    
    function OnGUI()
    {
    	if(GUI.Button(Rect(Screen.width - 100,Screen.height/2, 50,50),"Send"))
    	{
    		Application.ExternalCall( "UnitySend", "Unity says hello!" );
    	}
    	
     	if(GUI.Button(new Rect(Screen.width-120,Screen.height-40,120,30),"Click to YUHUA?"))         
        {      
        	Application.ExternalEval
    		(
        		"if(document.location.host != 'blog.csdn.net/libeifs') { document.location='http://blog.csdn.net/libeifs'; }"
    		);  
        }  
    }
    网页与Unity通信在上面又说,Unity与网页通信就用ExternalCall,指定到网页上的特定方法,而ExternalEval则是添加网页脚本,可以看到羽化把博客的链接部分添加到了网页上。




    4. 附送Unity编辑模式下自动保存和运行时保存小插件

    包的名字在下载中的YUHUA_SAVE,里面就一个脚本
    using UnityEditor;
    using UnityEngine;
    using System.Collections;
    
    public class YUHUA_SAVE : EditorWindow
    {
    	float saveTime = 600;
    	float nextSave;
    	bool AutoSave = false;
    	string sceneName;
    	
    	[MenuItem("YUHUA/SAVE")]
    	static public void Init() 
    	{
    		YUHUA_SAVE window = (YUHUA_SAVE)EditorWindow.GetWindowWithRect(typeof(YUHUA_SAVE),new Rect(0,0,200,40)); 
    		window.Show();
    	}
    	
    	void OnGUI() 
    	{
    		HandleUtility.Repaint();
    		
    		if(GUILayout.Button("AutoSave"))
    		{
    			AutoSave = !AutoSave;
    			nextSave = (float)EditorApplication.timeSinceStartup + saveTime;
    		}
    		
    		if(AutoSave)
    		{
    			EditorGUILayout.LabelField("Save Each:", saveTime + " Secs");
    			int timeToSave = (int)(nextSave - EditorApplication.timeSinceStartup);
    			EditorGUILayout.LabelField("Next Save:", timeToSave.ToString() + " Sec");
    			this.Repaint();
    
    			if(EditorApplication.timeSinceStartup > nextSave) 
    			{
    				Debug.Log("AutoSave!!!!!!");
    				string[] path = EditorApplication.currentScene.Split(char.Parse("/"));
    				path[path.Length -1] = "AutoSave_" + path[path.Length-1];
    				EditorApplication.SaveScene(string.Join("/",path));
    				nextSave = (float)(EditorApplication.timeSinceStartup + saveTime);
    			}
    		}
    		
    		if(EditorApplication.isPlaying || EditorApplication.isPaused) 
    		{
    			if(GUILayout.Button("PlayingSave"))
    			{
    				EditorPlay();
    			}	
    		}
    	}
    	
    	void EditorPlay()
    	{
    		Debug.Log("PlayingSave!!!!!!");
    		sceneName = EditorApplication.currentScene;
    		string[] path = sceneName.Split(char.Parse("/"));
    		
    		path[path.Length -1] = "Temp_" + path[path.Length-1];
    		string tempScene = string.Join("/",path);
    		EditorApplication.SaveScene(tempScene);
    		
    		FileUtil.DeleteFileOrDirectory(sceneName);
    		FileUtil.MoveFileOrDirectory(tempScene, sceneName);
    		FileUtil.DeleteFileOrDirectory(tempScene);
    		
    		EditorApplication.SaveScene(sceneName);
    		EditorApplication.OpenScene(sceneName);
    	}
    }
    如果一切顺利上方MENU会出现YUHUA->SAVE的菜单,点开后左上角会出现个下图的菜单,有些可能是个看不清的块,拖动到视图里面就会看清,运行后会再多出个Playing Save按钮。很实用的一个小工具,通过官方例子改的,只能在编辑模式下使用,有点小Bug,但不影响功能,可以更改脚本里的saveTime修改自动保存时间间隔。


    下载地址:

    下集预告:
    展开全文
  • #if UNITY_ANDROID && !UNITY_EDITOR platformPath = "/sdcard/DCIM/MyTempPhotos"; #endif // 如果文件夹不存在,就创建文件夹 if (!Directory.Exists(platformPath)) { Directory.CreateDirectory(platformPath);...

    “OpenCameraAndSaveImage”脚本具体内容如下:

    using System.Collections;

    using System.IO;

    using UnityEngine;

    using UnityEngine.UI;

    public class OpenCameraAndSaveImage : MonoBehaviour {

    // UI 相关参数

    public RawImage rawImage;

    public Button button_TakePhoto;

    // 摄像机图片参数

    private WebCamTexture webCamTexture;

    // Use this for initialization

    void Start() {

    // 打开相机

    StartCoroutine("OpenCamera");

    // 按钮绑定点击事件

    button_TakePhoto.onClick.AddListener(TakePhotoAndSaveImage_Button);

    }

    ///

    /// 使用协程打开相机函数

    ///

    ///

    IEnumerator OpenCamera() {

    // 申请相机权限

    yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);

    // 判断是否有相机权限

    if (Application.HasUserAuthorization(UserAuthorization.WebCam)) {

    // 获取相机设备

    WebCamDevice[] webCamDevices = WebCamTexture.devices;

    // 判断是否有相机设别

    if (webCamDevices != null && webCamDevices.Length > 0) {

    // 把 0 号设备(移动端后置摄像头)名称赋值

    string webCamName = webCamDevices[0].name;

    // 设置相机渲染宽高,并运行相机

    webCamTexture = new WebCamTexture(webCamName, Screen.width, Screen.height);

    webCamTexture.Play();

    // 把获取的图像渲染到画布上

    rawImage.texture = webCamTexture;

    }

    }

    }

    ///

    /// 拍照保存函数的包装接口

    ///

    void TakePhotoAndSaveImage_Button()

    {

    // 调用拍照保存函数

    TakePhotoAndSaveImage(webCamTexture);

    }

    ///

    /// 保存图片的接口函数

    ///

    ///

    void TakePhotoAndSaveImage(WebCamTexture tex) {

    // 新建一个 Texture2D 来获取相机图片

    // 然后 把图片转成 JPG 格式的 bytes

    Texture2D texture2D = new Texture2D(tex.width, tex.height, TextureFormat.RGBA32, true);

    texture2D.SetPixels32(tex.GetPixels32());

    texture2D.Apply();

    byte[] imageBytes = texture2D.EncodeToJPG();

    // 判断图片 bytes 是否为空

    if (imageBytes != null && imageBytes .Length > 0) {

    // 判断Android 平台,进行对应路径设置

    string savePath ;

    string platformPath = Application.streamingAssetsPath + "/MyTempPhotos";

    #if UNITY_ANDROID && !UNITY_EDITOR

    platformPath = "/sdcard/DCIM/MyTempPhotos";

    #endif

    // 如果文件夹不存在,就创建文件夹

    if (!Directory.Exists(platformPath)) {

    Directory.CreateDirectory(platformPath);

    }

    // 保存图片

    savePath = platformPath + "/" + Time.deltaTime + ".jpg";

    File.WriteAllBytes(savePath, imageBytes);

    }

    }

    }

    展开全文
  • 在一个Android项目中,需要使用Post和Get请求来调用后端写的接口,在编辑器环境中都没有问题,但是在手机中测试的时候却发现无法调通,最后多方面测试和研究找到合适的解决方案: 仅仅是需要Assets\Plugins\Android...
  • 使用为Vuplex VR / AR浏览器提供支持的相同代码,轻松地在Windows和macOS上以3D形式呈现Web内容并与之交互。 从URL或HTML字符串加载网页 使用WebViewPrefab和CanvasWebViewPrefab可以快速入门,它们会自动渲染到...
  • unity内嵌web

    2019-02-28 18:31:55
    unity内嵌web: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class OpenWebChoise : MonoBehaviour { #if UNITY_IOS || UNITY_ANDROID || ...
  • Unity Web Cache

    千次阅读 2013-09-27 11:11:15
    现在国内用unity来开发web的少之又少,几乎webgame都是山寨,而且还是山寨最受欢迎的。 所有搞正规的公司都是这样做,,,你不做就倒闭。我也不想进这样的公司,什么是农码,进去就知道。 我把我研究的分享...
  • 3D WebView for Android Web Browser 3.16
  • xLua为Unity,.Net,Mono等C#环境增加了Lua脚本编程的能力,可以使用xLua,这些Lua代码可以方便的和C#相互调用。 xLua的突破 xLua在功能,性能,易用性都有过多的突破,这几方面分别具有代表性的是: 可以运行时把...
  • 1、Embedded Browser 不支持移动端,可以 360 放置...4、In-App Web Browser 支持移动端,但是贴屏显示 3D WebView for Windows and macOS 3D WebView for Android 3D WebView for Android and iOS ...
  • 3D WebView for Android and iOS Web Browser
  • Unity Android模拟器调试

    2021-05-28 05:51:59
    Unity Android模拟器调试Unity项目遇到了只会在Android上出现的问题,code review再三没有找到问题,只能想到动态调试了。Unity Android的真机调试只能使用Wi-Fi调试,它要求开发机和Android设备在同一子网下,具体...
  • 本插件为了大多数IOS包的ipV4地址转成ipv6的,方便IOS包通过苹果的审核
  • unity web player是一款浏览器运行Unity3D游戏引擎发布的游戏的插件,一般是用户在玩游戏的时候系统自动安装的;通过unity web player插件可以发布web平台的游戏。本文操作环境:Windows7系统,Dell G3电脑。推荐:...
  • Unity Android在后台运行

    2020-12-20 02:50:25
    我正在构建一个简单的游戏,2人可以互相对抗.我使用GameSparks作为后端.我的问题是,每当玩家#1施放一个正在引导的咒语时,玩家#2只有在他的屏幕被打开并且...我认为这与Android系统的工作方式有关.它会将不重点关注的...
  • 使用与支持 Vuplex VR/AR 浏览器的相同代码,即可轻松在 Android 上以 3D 形式渲染 Web 内容并与之进行交互。
  • UnityWebRequest 简单资源下载 支持断点续传,下载进度,下载速度(每秒) 使用方法:开启一个协程,调用DownLoadFile即可, 需要传入3个Action,分别时下载进度,下载文件与当前文件总大小进度,和下载速度
  • 资源名称: Embedded Browser 资源版本: 3.0.0 资源类型: .unitypackage 资源大小: 430.5M 更新时间: 2019-08-28
  • 欢迎加入Unity业内qq交流群:956187480 qq扫描二维码加群 给个比较新的版本3.8的链接,据说是优化了很多用起来很方便,本人没有进行研究大家有兴趣的... 深入了解请参考Unity内部打开Web网页——《UniWebVie...
  • 当时项目要求,必须用unity获取某服务器上的数据,通过客户端发送不同的请求,得到服务器回发的数据(GB2312编码的数据),而且项目最终是要发布成web版的。接下来我便在unity中进行测试,在Unity的Game视窗中成功...
  • Unity is one of the most widely-used and best loved packages for game development and is used by everyone, from hobbyists to large studios, to create games and interactive experiences for the Web, ...
  • Unity关于浏览器插件相关的一些资源介绍和分享,针对浏览器开发时有一个很好地开始哦!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,632
精华内容 3,052
关键字:

安卓unityweb