编辑本段内容简介
编辑本段特色
编辑本段unity3d常见问题
编辑本段版本
编辑本段相关新闻
编辑本段使用此引擎的游戏
坦克英雄(网页游戏)
编辑本段内容简介
Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac 和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。编辑本段特色
综合编辑通过Unity简单的用户界面,玩家可以完成任何工作。这些为玩家节省了大量的时间。图形动力Unity对DirectX和OpenGL拥有高度优化的图形渲染管道。资源导入一键部署Unity可以让玩家的作品在多平台呈现。Wii的发布Unity让业界最流行的游戏平台软件更容易开发。iPhone发布Unity让革命性的游戏开发降临革命性的设备。着色器Unity的着色器系统整合了易用性、灵活性和高性能。地形低端硬件亦可流畅运行广阔茂盛的植被景观。联网从单人游戏到全实时多人游戏。物理特效Unity内置的NVIDIA®PhysX®物理引擎带给玩家生活的互动。音频和视频Unity资源服务器 Unity资源服务器是一个附加的包括版本控制的产品。光影 Unity提供了具有柔和阴影与烘焙lightmaps的高度完善的光影渲染系统。文档Unity为玩家提供逐步的指导、文档和实例方案。编辑本段unity3d常见问题
1:天空盒有接缝怎么解决?答:在贴图导入设置里设置Wrap Mode为"Clamp".2:DDS格式怎么不显示?答:Unity不支持DDS格式,Unity会将除DDS外的其他格式图片具有为DDS同样的优化.3:Unity如何动态载入外部模型等文件?答:可以使用AssetBundle4:脚本编辑器有语法提示吗?答:有的,Win版使用Ctrl+I,Mac版使用Ctrl+>.5:如何使用烘焙贴图(多重纹理)?答:不要使用Shell贴图,直接将烘焙图赋予贴图的"自发光"通道之上.6:怎么屏蔽Webplayer右键菜单?答:<param name="disableContextMenu" value="true" />7:为什么水面没有实时反射效果?答:只有专业版才支持这种反射效果.8:怎么做摄像机漫游动画?答:Max正常制作摄像机漫游动画,倒到Unity中后,将Unity的Camea拖拽到Max导出的摄像机Gameobject物体之上,作为其子物体即可.9:如何自定义Webplayer载入Logo及进度条?答:<param name="logoimage" value="Logo文件名" />,<param name="progressbarimage" value="进度条名" />,<param name="progressframeimage" value="进度条外框名" />.10:GUI上怎么使用中文字?答:导入任意中文字体,然后定义GUISkin字体为该字体即可.11:购买一个授权可以安装几台电脑?答:可以安装于2个系统之上比如一个Win版一个Mac版.12:Max文件扔到Unity中怎么说导入失败?答:下载最新版Fbx插件,用Max导出Fbx文件然后扔Unity中.13:如何不让摄像头穿透模型,离模型近了就像模型露面了?答:设置相机的Near clip plane,调小一点,但是不要给负数.14:怎么用双面贴图?答:Unity中可设置双面Shader,最简单有效的办法是直接做成双面的实体模型.复杂一点的方法可以在材质脚本中的相应的SubShader中的一个Pass块中加入cull off,即关闭反面裁剪[1]。15:导入的Fbx模型尺寸小于Max中的尺寸?答:在Unity中该文件的导入设置中设置缩放因子为1.16:如何给相机添加Glow效果?答:选中相机对象,在菜单中选中Component-Image Effects-Glow赋予该组件即可(专业版才支持此特效)17:怎么设置Webplayer默认尺寸?答:到菜单Edit-Project Settings-Player中设置Default Web Screen尺寸即可.18:怎么设置可执行文件的启动Banner?答:到菜单Edit-Project Settings-Player中设置Resolution Dialog Banner.19:如何设置雾效?答:到菜单Edit-Render Settings中开启Fog及设置Fog Color等即可.20:如何设定默认Skybox天空盒?21.unity3d虚拟现实的设计流程?答:max 制作模型,导出fbx,导入unity,设计相机代码,设计ui,build 。编辑本段版本
Windows版本:Unity 4.0.0f7Mac版本:Unity 3.4.2f2iPhone版本:Unity iPhone 1.7android版本:android2.2大陆发布版本Unity iOS Pro移动终端发布平台[4]Unity3D PRO 虚拟现实、跨平台应用程序开发引擎(教育版)[5]2012年11月15日,Unity Technologies公司正式推出Unity 4.0版本,新加入对于DriectX 11的支持和Mecanim动画工具,以及为用户提供Linux及Adobe Flash Player的部署预览功能。Unity 4.0被分为了Unity免费版和Unity Pro两种版本,两者在功能上没有任何区别,只是前者为用户提供了一个为期30天的使用许可,但可以立即下载使用,而后者则需要用户付费(1500美元)后才能进行下载。[6]编辑本段相关新闻
最近PC、MAC、iPhone、ipad、PS和Xbox360等众多平台的引擎效能成为了业界关心的焦点问题,而Unity3D游戏引擎技术研讨会在中国的召开,无疑吸引了各家厂商的目光。在上海举行的本届研讨会,由韩国国民大学游戏教育学院和中国东华大学联合举办。大会不仅是对Unity3D游戏引擎技术的介绍,更通过此次会议提升中国先进游戏技术的开发能力,培养后备研发人员。Unity3D游戏引擎技术研讨会最早于今年5月在韩国举行。据悉,现在十种以上的新引擎开发,都是采用了Unity3D游戏引擎技术。部分开发商利用2010年ChinaJoy展会之机,也展示了该引擎的运行效果。已有不少厂商同开发商签订了提前的引擎预定协议。编辑本段使用此引擎的游戏
激战海陆空神庙逃亡2(Temple Run 2)Unity3D页游《推倒Online》Unity3D游戏《萌战记》Unity游戏《格子RPG》U3D游戏《武士2: 复仇》
坦克英雄(网页游戏)战舰编辑本段如何学习unity3d
第一步首先了解unity3d的菜单,视图界面。这些事最基本的基础,可以像学word操作一样,大致能明白有几个菜单,几个基本的视图,各自起什么作用的就可以了。第二步理解场景里面的坐标系统,输入系统,简单的向量概念。Unity3D的坐标系统及向量概念如果不理解清楚,不理解世界坐标,局部坐标的关系,即使一个简单的移动,缩放,旋转的几行代码,也会困惑你半天。第三步学习创建基本的场景的一些基本概念:游戏对象,组件,脚本。在界面上分别体现在层次视图,项目视图及属性视图,要理清楚彼此之间的关系第四步学习资源导入方面的一些基本元素:网格,材质,贴图,动画等。第五步学习脚本的生命周期,Start,UpDate,ONGUI这些基本的方法。了解,预制,时间,数学等常用的类及相关方法。理解游戏对象,组件,脚本彼此之间的关系。第六步进一步学习摄像机,灯光,地形,渲染,粒子系统,物理系统等等,这些每一个深入进出都是一个很复杂的主题。
1. ShaderLab syntax: Culling & Depth Testing .Unity3D官方网站 .2012-09-05 [引用日期2012-12-15] .
2. unity3d问与答 .百度知道 .
6. Unity 4.0游戏引擎正式发布 用户可免费下载 .棋牌观察 .2011-11-20 [引用日期2012-11-21] .
7. unity3d学习交流论坛 .山东浙商互联有限公司 [引用日期2012-10-31] .
Unity3D官网:http://unity3d.com/
Unity3D中国总代理:http://www.unityagent.com/
Unity3D教程手册:http://www.unitymanual.com
Unity3D游戏专题:http://www.4399.com/special/262.htm
unity3d学习交流论坛:http://www.zheshang8.com/bbs/forum.php?gid=268
unity3d游戏导航:http://www.unitygame.cn/
Unity3D讨论社区:http://www.misoft.com.cn/
unity3d游戏大全:http://www.unitygame.cn/a/Uinty_xiaoyouxi
每周更新unity3d视频教程,从入门到就业,官方unity3d培训,上千门实时更新课程,供学员在线观看学习,unity3d游戏开发,可以让学员随时随地学习!
免费网上学习unity3d自学教程,国内名师机构专业授课,O基础快速学习,1小时快速入门,7天unity3d自学教程学习,能力快速提升,优质作品随手呈现!unity3d菜鸟自学教程介绍
unity3d难学吗?
unity3d自学教程目录
unity3d视频教程百度网盘下载
unity3d难学吗?
学习unity3d特效,多来学习路线网看教程,一线游戏特效老师,游戏特效就业安排!学习unity3d特效入门+进阶+精通选择专业才能学得专业!unity3d自学教程目录
课程介绍:
Unity3d史诗 MMO ARPG 课程《泰斗破坏神》,精心设计将包含200+课时,由视频课时+直播课时+测试课时混合组成。最重头unity3d ARGP课程,完整的 ARPG 网络游戏开发教学。包含多人合作,在线多人游戏开发,角色创建系统,作战系统,RPG系统,技能系统,任务系统,商店系统。课程大纲:
单机版功能实现
项目概要
登录系统
角色创建、选择、自定义系统
场景加载与游戏存储记录
角色控制
聊天通讯
游戏AI
战斗系统
游戏角色与玩家信息系统
商店系统
道具系统
装备系统
装备与道具掉落
仓库与背包系统
副本系统
任务系统
地图与寻路系统网络版功能实现
服务端搭建
登录系统
角色选择
游戏场景
聊天功能
角色具体信息
商店系统
道具系统
装备系统
仓库和背包
副本系统
任务系统unity3d视频教程百度网盘下载
http://www.xuexiluxian.net/unity3d-cainiao-zixue.html
推荐阅读
一、前言
话说,英语有英语等级证书,计算机也有等级证书,会计证,工程师证,那么从事Unity开发的工程师,有没有专属的职业资格证书呢。这个还是有的。
二、Unity 认证制定标准
Unity是最受欢迎的技术技能之一。
有一个最高的预测增长率,
在未来两年超过35%。
-----------Burning Glass,就业市场分析平台Unity初级工程师 Unity Certified Associate
证明你已经掌握了基本的Unity技能,并且理解了游戏开发的核心概念。Unity助理认证可以帮助你在申请学校、实习甚至工作时脱颖而出。了解如何为这一入门证书做准备,并在Unity认证.Unity开发工程师 Unity Certified Programmer
Unity3D美术师 Unity Certified 3D Artist
自信地申请,在这个不断发展、利润丰厚的领域找到你梦寐以求的工作。这些认证是为所有行业的有抱负和有经验的专业人员设计的。无论你是在申请你的第一份团结工作,还是想把你的职业提升到更高的水平,团结证书都可以帮助你验证你的能力,并表明你对专业标准的承诺。选择Unity程序员或Unity3D艺术家或两者都做!了解如何为这些证书做准备,并在Unity认证.Unity高级游戏开发工程师 Unity Certified Expert Gameplay Programmer
高级技术美工:绑定和动画工程师 Unity Certified Expert Technical Artist:Rigging & Animation
高级技术美工:阴影和效果工程师 Unity Certified Expert Technical Artist:Shading & Effects
把你的事业提升到最高水平。成为一个Unity认证专家,并展示你的专业技能在三个专业角色之一:游戏程序员,技术艺术家:绑定和动画,或技术艺术家:阴影和效果。Unity专家证书是推荐的人积累了各种先进的,实际经验:如经验开发游戏或交互式的,实时应用程序等。了解如何为这些专家认证做准备,并在Unity认证.三、如何认证
1.首先注册一个账号
https://wsr.pearsonvue.com/testtaker/profile/create/SignUp.htm?clientCode=UNITY&locale=en_US
注意全部填入英文,就是说能用英文用英文,不能用英文用拼音,反正中文不支持。2.登录之后进入这个网站
https://wsr.pearsonvue.com/testtaker/registration/SelectExamPage/UNITY?conversationId=3487617
选择报名科目
比如选择 UCP-572 Unity Certified Programmer
顺便提一下,这个Pearson VUE中文名是培生国际认证,其主要业务是提供世界水准的学术、应用学习以及职业技术证书和考试,在全球范围向学校和学生提供爱德思Edexcel、BTEC、LCCI等全球通行的学术和职业资格证书,以及PTE、Pearson VUE等多样化的考试测评服务,助力全球的学习者升学或就业。
培生爱德思是由两个历史悠久、有影响力的英国颁证机构爱德思考试局和伦敦工商会考试局合并而成, 2005年成为全球领先的教育机构培生集团的一员,组建了培生国际认证业务(Pearson Qualification International)。借助培生集团广阔的教育平台、优质教育资源和技术,培生国际认证的发展开始了新的篇章。
●从小学到高中学术证书,再到职业认证,培生国际认证已为世界各地数百万人提供了培训和考试服务。
●致力于提供世界一流的国际认证课程,帮助各类学习者充分发挥其潜力,为未来人生做好一切准备,而不仅仅限于考试本身。
3.选择考试选项
在家或者办公室是行不通的,只能选择At a local test center,本地的考核中心
价格是199美元 o(╥﹏╥)o4.找到离你最近的考核中心,预定时间就行了
四、后言
关于,培训资料,以及考试会考什么内容,这些内容可以进unity官网查看
https://unity3d.com/learn
https://certification.unity.com/?_ga=2.183816678.1798322751.1549942112-743246773.1530693732
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39717795
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
各位朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。首先祝大家能够度过一个愉快的十一长假。今天呢,博主将为大家送上Unity-Android系列的最后一篇文章《Unity3D游戏开发之从Unity3D到Eclipse》。通过前面的学习,大家已经知道通过在Eclipse中为Unity编写插件的方法,我们可以实现在Unity与Android API的通信。可是不幸的是,这种方法并不能对所有的Android API奏效,在某些时候,我们需要反客为主,将Unity项目导出为Android项目,然后在Eclipse中继续修改游戏的内容。这种方法在《Unity3D游戏开发之Unity与Android交互调用研究》这篇文章中已经提及,不过并没有真正地进行过研究。之前有个叫@SHANlover的朋友问我,能不能写一篇Unity项目导出Eclipse的文章,因此博主便抽空研究了下这种方法,从而有了今天的这篇文章。首先,我们来创建一个简单地场景:
好了,创建完场景以后我们就可以直接编写一个脚本CubeScripts.cs来控制场景中的Cube:
这段脚本十分地简单,没有什么可说的,在这里我们定义了两个方法ZoomIn和ZoomOut,这两个方法我们将提供给Android来调用。我们将这段脚本绑定到Main Cube这个对象上。接下来,我们将项目Build一下,这里我们将项目的PackageName设为com.android.unity2eclipse,然后将其导出为一个Android项目:using UnityEngine; using System.Collections; public class CubeScripts : MonoBehaviour { /// <summary> /// 定义旋转速度 /// </summary> public float RotateSpeed=45; /// <summary> /// 定义摄像机的最近距离 /// </summary> private float mNear=2.5F; /// <summary> /// 摄像机当前距离 /// </summary> private float mDistance=5F; /// <summary> /// 定义摄像机的最远距离 /// </summary> private float mFar=7.5F; /// <summary> /// 摄像机的缩放速率 /// </summary> private float mZoomRate=0.5F; /// <summary> /// 主摄像机 /// </summary> private Transform mCamera; /// <summary> /// 在Start()方法中我们设定了游戏体的名称,因为我们在 /// Android项目中需要用到这个名称,同时获取主相机对象 /// </summary> void Start () { this.name="Main Cube"; mCamera=Camera.main.transform; } /// <summary> /// 在Update()方法中我们让Cube按照一定的速度进行旋转 /// </summary> void Update () { transform.Rotate(Vector3.up * Time.deltaTime * RotateSpeed); } /// <summary> /// 定义一个放大的方法供外部调用 /// </summary> public void ZoomIn() { mDistance-=mZoomRate; mDistance=Mathf.Clamp(mDistance,mNear,mFar); mCamera.position=mCamera.rotation * new Vector3(0,0,-mDistance)+transform.position; } /// <summary> /// 定义一个缩小的方法供外部调用 /// </summary> public void ZoomOut() { mDistance+=mZoomRate; mDistance=Mathf.Clamp(mDistance,mNear,mFar); mCamera.position=mCamera.rotation * new Vector3(0,0,-mDistance)+transform.position; } }
那么,这样我们就得到一个可以在Eclipse中打开的Android项目。可是这个Android项目我们怎么样使用呢?在金曾玺老师《Unity3D手机游戏开发》一书中是将Unity导出的Android项目作为一个库,然后再用一个新的Android项目去调用这个库。这本书中所使用的Unity版本是4.X,而博主所使用的Unity版本是4.5.1。最初博主就是按照这种思路去编写Android程序,可是在经历了无数次的失败后,博主开始怀疑这种方法的正确性。带着尝试的念头,博主直接运行了由Unity导出的Android项目,结果程序成功地在手机上运行了。如图:
那么,接下来我们不妨冷静地分析下从Unity导出的这个Android项目,我们可以看到整个项目的目录结构是这样的:
在这个目录结构中,我们可以看到它是一个标准的Android项目,在libs中的unity-class.jar就是我们在前面的文章中所使用过的jar库文件。而在assets文件夹中我们可以看到Unity所依赖的dll文件。在com.android.unity2eclipse这个Package中,我们会发现一个名为UnityPlayerNativeActivity.class的类,该类定义如下:
相信大多数看过我博客的人都会觉得这个类有点眼熟吧,不错,在之前的《Unity3D游戏开发之在Android视图中嵌入Unity视图》这篇文章中,我们就是利用这个类实现了在Android视图中嵌入Unity视图,只不过当时这个类是定义在Unity的unity-class.jar这个库中的,而更为确切地位置是在com.unity3d.player这个包下面的UnityPlayerNativeActivity类,我们注意到此时这个类是继承自NativeActivity的,在前面的文章中博主曾经提及这个类,它是Android提供给C/C++开发者的接口。换句话说,Unity项目在Android平台上内部依靠的实际上就是NativeActivity接口,只不过Unity自己使用的接口是封装过的,而我们这里使用的接口是直接继承自父类。那么,我们在这一刻就会产生疑问,从这个类从具体实现上来讲主要的功能就是对Activity进行初始化,那么我们在Activity中能够看到什么由谁来决定呢?大家注意到这里有一个SetContentView()的方法,它传入了UnityPlayer类型的参数作为Activity显示的内容。相信从现在开始,大家对Unity提供的Android接口的认识会越来越清晰吧。为了验证我们的想法,接下来,我们来创建一个布局文件activity_main,它的代码定义如下:package com.android.unity2ecplise; import com.unity3d.player.*; import android.app.NativeActivity; import android.content.res.Configuration; import android.graphics.PixelFormat; import android.os.Bundle; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Window; import android.view.WindowManager; public class UnityPlayerNativeActivity extends NativeActivity { protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code // Setup activity layout @Override protected void onCreate (Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); getWindow().takeSurface(null); setTheme(android.R.style.Theme_NoTitleBar_Fullscreen); getWindow().setFormat(PixelFormat.RGB_565); mUnityPlayer = new UnityPlayer(this); if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true)) getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(mUnityPlayer); mUnityPlayer.requestFocus(); } // Quit Unity @Override protected void onDestroy () { mUnityPlayer.quit(); super.onDestroy(); } // Pause Unity @Override protected void onPause() { super.onPause(); mUnityPlayer.pause(); } // Resume Unity @Override protected void onResume() { super.onResume(); mUnityPlayer.resume(); } // This ensures the layout will be correct. @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mUnityPlayer.configurationChanged(newConfig); } // Notify Unity of the focus change. @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); mUnityPlayer.windowFocusChanged(hasFocus); } // For some reason the multiple keyevent type is not supported by the ndk. // Force event injection by overriding dispatchKeyEvent(). @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_MULTIPLE) return mUnityPlayer.injectEvent(event); return super.dispatchKeyEvent(event); } // Pass any events not handled by (unfocused) views straight to UnityPlayer @Override public boolean onKeyUp(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); } /*API12*/ public boolean onGenericMotionEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); } }
接下来,我们创建与之对应的Java类文件MainActivity.class:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <Button android:id="@+id/BtnZoomIn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:text="@string/ZoomIn" /> <LinearLayout android:id="@+id/UnityView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/BtnZoomOut" android:layout_below="@+id/BtnZoomIn" android:orientation="vertical" > </LinearLayout> <Button android:id="@+id/BtnZoomOut" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="@string/ZoomOut" /> </RelativeLayout>
在这段代码中,我们通过UnitySendMessage调用了Unity中定义的两个方法ZoomIn、ZoomOut。好了,接下来,我们修改配置文件,使主Activity对应于MainActivity类,打开package com.android.unity2ecplise; import com.android.unity2ecplise.R; import com.unity3d.player.UnityPlayer; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; /*我们这里让我们定义的MainActivity继承自Unity导出项目中的UnityPlayerNativeActivity*/ public class MainActivity extends UnityPlayerNativeActivity { private Button BtnZoomIn,BtnZoomOut; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取显示Unity视图的父控件 LinearLayout mParent=(LinearLayout)findViewById(R.id.UnityView); //获取Unity视图 View mView=mUnityPlayer.getView(); //将Unity视图添加到Android视图中 mParent.addView(mView); //放大 BtnZoomIn=(Button)findViewById(R.id.BtnZoomIn); BtnZoomIn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { UnityPlayer.UnitySendMessage("Main Cube","ZoomIn",""); } }); //缩小 BtnZoomOut=(Button)findViewById(R.id.BtnZoomOut); BtnZoomOut.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { UnityPlayer.UnitySendMessage("Main Cube","ZoomOut",""); } }); } }
AndroidManifest.xml文件:如我们所猜测的那样,acivity节点的name属性对应于com.android.unity2ecplise.UnityPlayerNativeActivity。这说明在此之前,Android是以这个类作为主Acivity。现在我们将其改为我们自己定义的类,这样我们就能使用自己定义的布局。同时大家会注意到下面这两行:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.unity2ecplise" android:theme="@android:style/Theme.NoTitleBar" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" /> <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false"> <activity android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:name="com.android.unity2ecplise.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" /> </activity> </application> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17" /> <uses-feature android:glEsVersion="0x00020000" /> </manifest>
之前我们在讲Unity视图嵌入Android视图时曾经碰到过Android视图无法取得焦点的问题,当时就是在配置文件中加入了这样两行代码,此时此刻,大家是不是和博主一样有种大彻大悟的感觉呢。我们运行程序,会发现界面像我们所希望看到的那样被改变了,而且我们可以通过两个按钮来改变视图中立方体的大小:<meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
这样我们就可以认识到从Unity中导出的就是Android项目,我们可以直接将其修改来达到满足我们要求的目的。至于金曾玺老师的这种方法,在官方API文档中的确有提到过这种方法,不过博主尝试了好久,这种方法都失败了,不知道是不是因为Unity在新版本中已经解决了这个问题,从而可以直接导出可运行的Android项目。最后来说说网络上流传的一种方法,据说在Unity中将项目Build下就会在工程目录下的Temp文件夹下生成一个名为StagingArea文件夹,我们将这个文件夹在导入到Eclipse中并将其设为一个库,然后在新建的Android项目中引用这个库,并将这个项目中的assets文件夹覆盖新建项目中的assets文件夹,然后我们只要让主Acitivity继承Unity提供的Android接口中的UnityPlayerActivity即可。这种方法博主并没有去尝试,不过在Build的时候确实会产生这样一个文件夹,不过博主觉得这样是不是有点麻烦了啊,既然Unity导出的Android项目直接就能用,我们何必要再去用这种复杂的方法呢,不过我觉得大致的思路就是这样的,UnityPlayerActivity负责Acivity生命周期的维护,UnityPlayer负责渲染Unity场景中的内容,而我们在Unity中使用的资源都被Unity的引擎在内部进行了处理,总之把握了这些,Unity和Android的交互就基本没什么问题了。好了,谢谢大家关注我的博客,今天的内容就是这样了,希望大家喜欢。
每日箴言:有些路看起来很近,可是走下去却很远的,缺少耐心的人永远走不到头。人生,一半是现实,一半是梦想。 ——顾城
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39717795
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------