1. unity3D 不用resourcLoad怎么读取multipleSprite
用Resources.LoadAll原本是最好的方式,不在resources下的话尝试AssetDatabase.LoadAllAssetsAtPath
2. unity3d如何不通过build,只在工程文件中生成 .exe文件,可以直接运行
可能是缺少了有被引用的系统文件.Unity3D生成的exe文件看似很小,但跟很多系统文件相关连,跟buiding 设置有关吧
3. Unity3D 配置文件
用.net的xml解析就可以了。一样使用的,路径可以用unity提供的借口Application.dataPath来获得项目的相对路径。
4. unity3d如何读取和写ini配置文件或者其他类型的配置文件
这种个人认为其实都是文本文件,只不过格式不一样了。很遗憾配置文件我用得很低端,我自己用的大多就是文件流(简单粗暴)。对于INI,我似乎只能给出以下方法:[System.Runtime.InteropServices.DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);[System.Runtime.InteropServices.DllImport("kernel32")]private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);//读写示例方法void demo(){StringBuilder demos = new StringBuilder (255);WritePrivateProfileString ("section", "name", "theDemo", @"D:\theDemoini.ini");GetPrivateProfileString ("section" , "name" ,"" ,demos,255 , @"D:\theDemoini.ini");print (demos);}
5. unity3D 4.6中 UI 怎么才能Find到
想想find 未尝不可。推荐把所有物体放到Scene(Scene.tranfrom.parent = null)在你需要的地方用Scence.tranfrom.findChild(""),不知道有没有测试过这个的效率,不过想来也应该好很多。public不好使,如果做多了自己都不知道拖的是什么 尤其是有预制的情况。总结:写个配置文件,把场景需要的物体都收集到容器里面,由初始化管理器统一初始化(在可接受范围内,用户并不在乎在游戏开始之前多等待几秒)。
6. unity3d ios 重新编译 替换哪些
1、在Unity3d中, 创建导出 iOS、Android 项目脚本 PerformBuild.cs ,放在Editor目录下(必须),如下: View Code完成之后在Tools菜单下 会有 测试菜单 ,可以试一下是否可以成功导出项目。2、创建Jenkins配置文件 build.xml 和 参数文件 settings.propertiesbuild.xml 如下:(有其他需求,编辑此文件即可) View Codesettings.properties 如下: (注意把下面该改成自己项目的改一下)注:xcode5 去 /Users/<home>/Library/MobileDevice/Provisioning Profiles 目录找证书GUID View Code3、打开Jenkins,按如下步骤新建一个Job: 3.1、3.2、找到 构建 -> 增加构建步骤 -> Invoke Ant3.3、选择高级3.4、输入 build File 路径 和 Properties 路径,然后保存job4、现在就可以点击 立即构建 开始编译你的项目了,开始前请先退出Unity3d,否则会报错。 此外 iOS 需要MAC相关环境
7. 如何在IOS设备使用Unity3D
1.获得Unity和iOS导出器如果您还未获得Unity3D工具,不要说IOS了,恐怕任何Unity3D游戏根本无法进行开发,这时,您首先应该到官网去下载最新版本的Unity。该程序目前有两个版本,分别是免费版(2.注册苹果开发者接下来,您需要做的下一件事便是加入苹果开发者,这是继续您IOS开发的必要过程(不注册,不能上传软件,开发了也没意义)。附带一提,加入苹果开发者,需要每年支付99美元。如果您可以承受此代价,那么,您可以通过以下地址进行注册:3.下载并安装XCode好了,如果您已经加入苹果开发者,那么,下一件事便是下载并安装XCode了。这在一开始可能会让人困惑,有些初次接触Unity的朋友,可能会认为XCode是为iOS创造原生应用的,关Unity什么事?其实,Unity在IOS开发时,也要使用XCode作为中介将C#或JS代码,编译为IOS的本地应用,再发布到iOS设备中,所以,您真正使用的核心,依旧是苹果XCode,只是Unity3D封装了具体的操作与转化过程,您所有的开发将是发生在Unity上,而非XCode上执行(底层借助Mono实现,而Mono借助LLVM翻译Unity脚本为本地语言)。在这里,XCode的作用只是将内容从Unity导入到具体设备中。您可以从苹果商店中下载XCode:4.创造一个开发者配置文件到目前为止,您应该已经下载了Unity(无论正版或破解)以及XCode,并激活了您的苹果开发者身份。但是现在,为了能将您的游戏直接从Unity导入到IOS设备上,您还需要一个开发者配置文件(需要依赖此配置文件,才能让你移植你所开发的游戏或任何测试用例到您的IOS设备上)。具体来说,苹果提供了两种类型的文件配置方式,即用于开发和测试的开发者配置文件以及用于提交到苹果商店的分布配置文件。为了创造开发者配置文件,您需要做3件事:1、注册你的设备2、建立一个应用ID3、获得签名证书。您可以通过你的苹果开发者邮件中的引导,来完成这三件事。具体操作可通过地址:现在选择Certificates,Identifiers和Profiles,您便能够从中访问并管理你的配置文件,苹果ID等等。1)注册你的设备在Certificates,Identifiers和Profiles部分中选择设备。因为这对于苹果去识别用于测试的特定设备是必要的。这并不会改变你的设备的任何设置,你能够轻松地使用自己每天所使用的设备。在注册你的设备时,你可以点击+按键去添加一个新设备。然后你需要填写设备的名字(可以是任何名字)以及UDID(即设备独一无二的ID)。你将会发现自己可以注册一个以上的设备进行测试,如果你想要基于不同设备进行测试的话这边很有帮助(如一台iPhone和一台iPad)。为了找到你的设备的UDID,你需要将你的设备与电脑连接在一起,然后打开iTunes并点击iPhone按键(界面的右上方的),你将看到设备的信息包含了名字。然后你可以将鼠标停在上方并点击SerialNumber,这将变成一个常标识,这便是UDID。这是你需要的数字,你必须将其复制黏贴到MemberCenterPortal的ID部分。现在你便可以注册你的设备了。记住一旦你注册了设备,你便只能改变它的名字而不能改变UDID。2)设置一个应用ID下一步便是设置你的应用ID。仍然在MemberCenterPortal的Certificates,Identifiers和Profiles,选择应用ID并点击+按键。首先提供任何你想要的描述,只要它能够帮助你记得你的ID是用于做什么便可。一个好的方法便是为一款应用使用一个独特的名字并为一款测试应用使用一个普通的名字。接下来你需要设置BundleIdentifier,这是以相反的域符号形式呈现出来“即:com+你的全名(如果你是一名个体开发者的话)+你的游戏名称:com.YourName.TheGameName这类型的BundleID将很清楚并只能用于唯一的一款游戏中。因此你需要为你的每一款游戏使用不同的名字。然而这是很有用的,这让你能够访问像“游戏中心”和“应用内部购买”等服务。另一方面,Wildcard的BundleID是以如下形式呈现出来:com.YourName.*这里用星号替代了游戏名字。这种格式让你能够在多款应用中使用同样的ID,而无需每次都设置一个不同的名字,但是这却不允许你使用特定的设备。现在你已经选择了继续并确认了应用ID。将捆绑ID记录下来,因为之后你将需要在Unity的构建设置中使用到它。3)获得开发者证书现在,你需要做的第一件事,便是通过你的计算机获得CertificateSigningRequest。前往Applications>Utilities>KeychaneAccess,然后是Preferences>Certificates。确保和CertificateRevocationList都是处于OFF,并关闭Preference。现在在KeychaneAccess中前往CertificateAssistant并从CertificateAuthority中选择RequestCertificate。提供与你在注册开发者计划时使用的同样细节并点击继续。提供一个名字并保存到Desktop。在保存时选择2048位体和RSA。现在在你的Desktop中应该拥有一个带着.certSigningRequest前缀的文件。现在回到MemberCenterPortal的Certificates,Identifiers和Profiles部分,选择Certificates>Development(就像你要获得开发证书那样),然后按压+按键进行创造。选择上传你保存在Desktop中的CertificateSigningRequest。在你提交前,确保向下滚动页面并在IntermediateCertificates中找到WWDRCertificate。在你之后需要的时候可以下载它。现在进行提交,你的CertificateSigningRequest将被发送到苹果并被另外一个你能够下载的内容所取代。它将被命名为:ios_development.cer所以现在你的Desktop上应该拥有两个证书。即ios_development.cer和WWDRCertificate,你需要双击这两个证书将其安装于KeychaneAccess。现在你便设置好你的开发者证书了。4)创造配置文件在完成上述三个步骤后,现在的你可以继续去创造配置文件了。仍然在MemberCenterPortal的Certificates,Identifiers和Profiles中,前往ProvisioningProfiles>All并按压+按键去创造一个全新的配置文件。在Development和DistributionProfile中做出选择(这里我们需要的是Development!),然后在下一个屏幕上选择与该配置文件相联系的应用ID,设备和证书(注:这是你在之前步骤已经设置好了的)。最后为配置文件命名并回顾之前的选择。当准备好时点击Generate。现在你便可以看到你的全新配置文件,你需要将其下载到你的Desktop上然后安装它。配置文件将是一个带有.mobileprovision前缀的文件。现在转向XCode,前往Window>Organizer>Devices>ProvisioningProfile,然后双击已经下载到你的Desktop上的配置文件。你便完成了安装并能够给予Organizer视图看到它。最后一步非常重要,因为只有将配置文件安装到Xcode,它才能够正常运行。一些额外的内容:仍然在XCode,如果你的设备在Devices视图中仍看不到,那就前往Window>Organizer>Devices,按照名字选择设备。你可能需要在这个过程中选择UseforDevelopment,然后提供你的开发者记录细节。虽然这是一个较为漫长的过程,但好消息是你已经完成工作了!现在,您可以开始致力于你的Unity游戏并准备好导出它。但请记住,您只能注册设备和创造开发者证书一次,每当你创造一款新游戏时你都需要创造一个全新的应用ID和全新的配置文件。5.使用Unity发布IOS游戏当您准备好导出你的游戏时,启动Unity3D,选择File>BuildSettings,确保您选择了iOS作为平台,并记得包含当前场景到导出游戏中(使用AddCurrent按键)。然后点击PlayerSeetings按键并前往OtherSettings。将BundleIdentifier按照你之前设置好的进行设置(com.YourName.TheGameName),你可能需要将TargetIOS版本设为6(或者未来的最新版本)。除此之外,将所有内容都保持为默认即可,除非您有必须改变它们的理由(特殊设定之类)。然后回到BuildSettingsWindow并点击Build,将项目保持到其自身的文件夹中。此刻,连接你的设备和计算机,打开文件夹并开始XCode项目。你将看到它在XCode中打开。从XCode界面的左上角选择你的设备,然后点击Run按键。
8. unity3d 调用unityeditor 怎么打包
开发中,迩可能会遇到在xcode里添加一些需要调用原生api的方法,可能是game center,可能是内购之类的,但是这些插件实在太多了,所以迩大可不必自己写这些插件,问题在于,国内的一些插件,像91平台的,PP助手等,之类的插件是没有的,这里还是需要自己去集成的,那么迩自动打包就是个问题了。总不可能每次把u3d项目打包成xcode项目时再配置一次,再把框架引入吧,真是效率低下。其实自动打包还真是不是三言两语能说得完的,这里原理就是主要使用unity3d编辑管线的API实现的,当调用了编译游戏后有个事件是当迩执行完编译时调用的,这里可以调用的种类是可以任意的,可以是python语言脚本,可以是mac应用,总之当迩编译完再调用这些外部脚本时,便可以通过这些外部的应用再对xcode项目做手脚,达到自动打包的目的,其实就是文件处理器,和文字处理,所有的xcode项目配置也是由配置文本所组成的,当然配置文本是复杂的,迩要是想一一去了解这些配置的意义又是另一翻景象了。这里我教大家一个偷懒的方法,迩去各大unity论坛下载一个prime31的插件,可以是game center,也可以是其它的,为什么呢,因为prime31这公司就做了一个自动打包的程序在里面了,而且还是可配置的,这会儿大家可开心了吧。1、其实prime31会把根目录的Editor里的文件夹打包进去xocde的项目,但是,需要事先填入一个配置文件里头先,这里头的配置文件不大记得清了,总之是在Editor目录里有一个plist类型的东西,把那里的框架填入后,编译时就会把Editor的相应框架打包进项目里的了。2、关于xcode的自动配置功能,其实这里也是用到prime31的,里头也有一个相应的plist是定义配置功能,具体大家可以找找希望可以帮助到你,如果有什么想要的unity插件可以到纳金论坛去找。
9. 怎么配置linux服务器的unity3d发布的web的沙盒安全机制
Apache 服务器的安全特性1、 采用选择性访问控制和强制性访问控制的安全策略从Apache 或Web的角度来讲,选择性访问控制DAC(Discretionary Access Control)仍是基于用户名和密码的,强制性访问控制MAC(Mandatory Access Control)则是依据发出请求的客户端的IP地址或所在的域号来进行界定的。对于DAC方式,如输入错误,那么用户还有机会更正,从新输入正确的的密码;如果用户通过不了MAC关卡,那么用户将被禁止做进一步的操作,除非服务器作出安全策略调整,否则用户的任何努力都将无济于事。2、Apache 的安全模块Apache 的一个优势便是其灵活的模块结构,其设计思想也是围绕模块(Moles)概念而展开的。安全模块是Apache Server中的极其重要的组成部分。这些安全模块负责提供Apache Server的访问控制和认证、授权等一系列至关重要的安全服务。mod_access模块能够根据访问者的IP地址(或域名,主机名等)来控制对Apache服务器的访问,称之为基于主机的访问控制。mod_auth模块用来控制用户和组的认证授权(Authentication)。用户名和口令存于纯文本文件中。mod_auth_db和mod_auth_dbm模块则分别将用户信息(如名称、组属和口令等)存于Berkeley-DB及DBM型的小型数据库中,便于管理及提高应用效率。mod_auth_digest模块则采用MD5数字签名的方式来进行用户的认证,但它相应的需要客户端的支持。mod_auth_anon模块的功能和mod_auth的功能类似,只是它允许匿名登录,将用户输入的E-mail地址作为口令。SSL(Secure Socket Lager),被Apache所支持的安全套接字层协议,提供Internet上安全交易服务,如电子商务中的一项安全措施。通过对通讯字节流的加密来防止敏感信息的泄漏。但是,Apache的这种支持是建立在对Apache的API扩展来实现的,相当于一个外部模块,通过与第三方程序的结合提供安全的网上交易支持。Apache服务器的安全配置Apache具有灵活的设置,所有Apache的安全特性都要经过周密的设计与规划,进行认真地配置才能够实现。Apache服务器的安全配置包括很多层面,有运行环境、认证与授权设置等。Apache的安装配置和运行示例如下:1、以Nobody用户运行一般情况下,Apache是由Root 来安装和运行的。如果Apache Server进程具有Root用户特权,那么它将给系统的安全构成很大的威胁,应确保Apache Server进程以最可能低的权限用户来运行。通过修改httpd.conf文件中的下列选项,以Nobody用户运行Apache 达到相对安全的目的。User nobodyGroup# -12、ServerRoot目录的权限为了确保所有的配置是适当的和安全的,需要严格控制Apache 主目录的访问权限,使非超级用户不能修改该目录中的内容。Apache 的主目录对应于Apache Server配置文件httpd.conf的Server Root控制项中,应为:Server Root /usr/local/apache3、SSI的配置在配置文件access.conf 或httpd.conf中的确Options指令处加入Includes NO EXEC选项,用以禁用Apache Server 中的执行功能。避免用户直接执行Apache 服务器中的执行程序,而造成服务器系统的公开化。Options Includes Noexec4、阻止用户修改系统设置在Apache 服务器的配置文件中进行以下的设置,阻止用户建立、修改 .htaccess文件,防止用户超越能定义的系统安全特性。AllowOveride NoneOptions NoneAllow from all然后再分别对特定的目录进行适当的配置。5、改变Apache 服务器的确省访问特性Apache 的默认设置只能保障一定程度的安全,如果服务器能够通过正常的映射规则找到文件,那么客户端便会获取该文件,如http://local host/~ root/ 将允许用户访问整个文件系统。在服务器文件中加入如下内容:order deny,ellowDeny from all将禁止对文件系统的缺省访问。6、CGI脚本的安全考虑CGI脚本是一系列可以通过Web服务器来运行的程序。为了保证系统的安全性,应确保CGI的作者是可信的。对CGI而言,最好将其限制在一个特定的目录下,如cgi-bin之下,便于管理;另外应该保证CGI目录下的文件是不可写的,避免一些欺骗性的程序驻留或混迹其中;如果能够给用户提供一个安全性良好的CGI程序的模块作为参考,也许会减少许多不必要的麻烦和安全隐患;除去CGI目录下的所有非业务应用的脚本,以防异常的信息泄漏。以上这些常用的举措可以给Apache Server 一个基本的安全运行环境,显然在具体实施上还要做进一步的细化分解,制定出符合实际应用的安全配置方案。Apache Server基于主机的访问控制Apache Server默认情况下的安全配置是拒绝一切访问。假定Apache Server内容存放在/usr/local/apache/share 目录下,下面的指令将实现这种设置:Deny from allAllow Override None则禁止在任一目录下改变认证和访问控制方法。同样,可以用特有的命令Deny、Allow指定某些用户可以访问,哪些用户不能访问,提供一定的灵活性。当Deny、Allow一起用时,用命令Order决定Deny和Allow合用的顺序,如下所示:1、 拒绝某类地址的用户对服务器的访问权(Deny)如:Deny from allDeny from test.cnn.comDeny from 204.168.190.13Deny from 10.10.10.0/255.255.0.02、 允许某类地址的用户对服务器的访问权(Allow)如:Allow from allAllow from test.cnn.comAllow from 204.168.190.13Allow from 10.10.10.0/255.255.0.0Deny和Allow指令后可以输入多个变量。3、简单配置实例:Order Allow, DenyAllow from allDeny from www.test.com指想让所有的人访问Apache服务器,但不希望来自www.test.com的任何访问。Order Deny, AllowDeny from allAllow from test.cnn.com指不想让所有人访问,但希望给test.cnn.com网站的来访。Apache Sever的用户认证与授权概括的讲,用户认证就是验证用户的身份的真实性,如用户帐号是否在数据库中,及用户帐号所对应的密码是否正确;用户授权表示检验有效用户是否被许可访问特定的资源。在Apache中,几乎所有的安全模块实际上兼顾这两个方面。从安全的角度来看,用户的认证和授权相当于选择性访问控制。建立用户的认证授权需要三个步骤:1、建立用户库用户名和口令列表需要存在于文件(mod_auth模块)或数据库(mod_auth_dbm模块)中。基于安全的原因,该文件不能存放在文挡的根目录下。如,存放在/usr/local/etc/httpd下的users文件,其格式与UNIX口令文件格式相似,但口令是以加密的形式存放的。应用程序htpasswd可以用来添加或更改程序:htpasswd –c /usr/local/etc/httpd/users martin-c表明添加新用户,martin为新添加的用户名,在程序执行过程中,两次输入口令回答。用户名和口令添加到users文件中。产生的用户文件有如下的形式:martin:WrU808BHQai36jane:iABCQFQs40E8Mart:FadHN3W753sSU第一域是用户名,第二个域是用户密码。2、配置服务器的保护域为了使Apache服务器能够利用用户文件中的用户名和口令信息,需要设置保护域(Realm)。一个域实际上是站点的一部分(如一个目录、文档等)或整个站点只供部分用户访问。在相关目录下的.htaccess文件或httpd.conf ( acces.conf ) 中的段中,由AuthName来指定被保护层的域。在.htaccess文件中对用户文件有效用户的授权访问及指定域保护有如下指定:AuthName “restricted stuff”Authtype BasicAuthUserFile /usr/local/etc/httpd/usersRequire valid-user其中,AuthName指出了保护域的域名(Realm Name)。valid-user参数意味着user文件中的所有用户都是可用的。一旦用户输入了一个有效的用户/口令时,同一个域内的其他资源都可以利用同样的用户/口令来进行访问,同样可以使两个不同的区域共用同样的用户/口令。3、告诉服务器哪些用户拥有资源的访问权限如果想将一资源的访问权限授予一组客户,可以将他们的名字都列在Require之后。最好的办法是利用组(group)文件。组的操作和标准的UNIX的组的概念类似,任一个用户可以属于一个和数个组。这样就可以在配置文件中利用Require对组赋予某些权限。如:Require group staffRequire group staff adminRequire user adminuser指定了一个组、几个组或一个用户的访问权限。需要指出的是,当需要建立大批用户帐号时,那么Apache服务器利用用户文件数据库将会极大地降低效率。这种情况下,最好采用数据库格式的帐号文件,譬如 DBM数据库格式的文件。还可以根据需要利用db格式(mod_auth_db)的数据文件,或者直接利用数据库,如:mSQL(mod_auth_msql)或DBI兼容的数据库(mod_auth_dbi)。
10. unity3d异步加载的内存释放问题
最近也在纠缠这些东西Unity在这方面比较黑箱 有时候很困惑 比较特殊的就是这个Destroy.Destroy一个Asset的实例是可以的,但是如果Destroy一个Asset就会把这个Asset文件被摧毁。对于Prefab,这种差异很好区分,应该Destroy那个Instantiate出来的Object但是对于一些特殊的Asset,这个差异就不那么好理解了。比如贴图,一般很少显式的去Instantiate创建实例,而是这样:a.renderer.mainTexture = AssetBundle1.Load("贴图1")b.renderer.mainTexture = AssetBundle1.Load("贴图1")这种方法 其实是个引用 ,如果你Destroy这个AssetBundle1 那贴图1就没了 如果你Destroy这个a或者b的mainTexture,也是一样结果。如果你 Texture tex = Instantiate( AssetBundle1.Load("贴图1")) as Texture;这个tex是可以被Destroy的 要实例一个贴图 导入的地方要标志为readable。如果你循环: a.renderer.mainTexture = AssetBundle1.Load("贴图2")b.renderer.mainTexture = AssetBundle1.Load("贴图2")不停加载新贴图,之前创建的贴图就成了无引用的游离Assets,会导致内存不断增加。解决办法 要么你自己记录每一次加载的对象,在不用的时候用Resources.UnloadAsset(object)释放,简单的办法用一个Resources.UnLoadUnusedAssets就能把这些没有指向的游离Asset全部释放掉,但是很慢。如果概念不太清楚的,Destroy要慎用 除了Prefab.简单的说 Load的东西释放应该用UnLoad,Instantiate的东西才用Destroy,一一对应起来理论上就没有泄露。如果找不到当时那个Load的对象了就简单的Resources.UnLoadUnusedAssets。Destroy一个asset等于删掉那个资源,奇怪官方论坛居然很多人建议Destroy texture,洋人也不都是干货。 download.assetBundle.Unload(true)这句一般就会Unload这个AssetBundle并且把关联的实例对象都清除。有这句理论上你不用Destroy。 另外内存回收不是即时的 我试过跟踪,发现Unity和Mono的GC工作并不是很效率,和标准.net的GC有较大差距。之前曾经碰到过,连续Load Unload闪退的情况,后来发现GC没有及时生效,内存还是会突破限制,于是就在每个Unload后跟了一个GC.Collect() 另外现在WWW不需要显式的Dispose,你看官方Demo现在都不用这个了如果你还有什么不懂的,可以网络搜下:编程回忆录,他们现在正在录制这方面的教程,都是零基础开始,由浅入深。