<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[XiaoKe's Blog - 技术日志]]></title>
  <subtitle type="html"><![CDATA[Unity3D,Unity for iPhone, Unity for Android,Xcode,TextMate,3DS Max,Photoshop,Nod32,Kmplayer,Total Commander,EmEditor,IrfanView,IP Messenger,Synergy......]]></subtitle>
  <id>http://www.1vr.cn/</id>
  <link rel="alternate" type="text/html" href="http://www.1vr.cn/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.1vr.cn/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2010-09-10T17:35:27+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[苹果声明解除iOS应用开发工具禁令]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-09-10T17:35:27+08:00</updated>
	  <published>2010-09-10T17:35:27+08:00</published>
		  <summary type="html"><![CDATA[不知何时我的博客失去了原始目的.不是除了Unity就是Apple.最近不太好.淡定.<br/><br/><br/>北京时间9月10日凌晨消息，据国外媒体报道，<a href="Http://1Vr.Cn" target="_blank">苹果</a>发布声明，解除对包括Flash在内的一切开发工具的禁令，供App Store的应用程序开发者自行选择。<br/><br/>　　去年春天，Adobe发布开发工具，使工程师们可以利用Flash开发iOS应用。<a href="Http://1Vr.Cn" target="_blank">苹果</a>的回应却是封禁不是通过<a href="Http://1Vr.Cn" target="_blank">苹果</a>自有工具开发的一切程序。<br/><br/>　　<a href="Http://1Vr.Cn" target="_blank">苹果</a>及其CEO史蒂夫·乔布斯(Steve Jobs)坚称，此举是为了保护用户，因为利用<a href="Http://1Vr.Cn" target="_blank">苹果</a>的工具为iPhone开发的程序能够更好地运行。但这一行为激怒了许多开发者，因为他们的选择余地受到限制，为多种平台开发程序也更为困难。显然，<a href="Http://1Vr.Cn" target="_blank">苹果</a>接受了用户的意见。<br/><br/>　　<a href="Http://1Vr.Cn" target="_blank">苹果</a>声明全文如下：<br/><br/>　　<a href="Http://1Vr.Cn" target="_blank">苹果</a>应用商店App Store已经改变了移动应用程序的开发和分销方式。它已经成为世界上最大的移动应用平台，应用程序数量超过25万个，下载超过65亿次。开发者们通过销售应用程序，已经获取了10亿美元以上的收益。<br/><br/>　　我们一直在努力让App Store变得更好。我们听取开发者的意见，并认真考虑他们的反馈。以此为基础，今天我们要对iOS开发者程序许可证的第3.3.1、3.3.2及3.3.9条款作重要修改，并解除今年早些时候发布的某些禁令。<br/><br/>　　我们特此宣布，在开发成果不下载任何代码的前提下，解除有关iOS应用程序开发工具的一切禁令。这将给予开发者所想要的灵活性，同时又保持了我们所需要的安全性。<br/><br/>　　此外，我们将首次公开App Store审核方针，以帮助开发者了解我们是如何审核他们提交的应用的。我们希望这一举措能使我们更加透明，并帮助开发者创造出更多的App Store应用程序。<br/><br/>　　App Store也许是移动软件历史上最为重要的里程碑。我们将与开发者通力合作，继续通过创新移动应用给用户带来惊喜和欢乐。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=543" /> 
	  <id>http://www.1vr.cn/default.asp?id=543</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Unity3技术之表面着色]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-07-22T12:47:36+08:00</updated>
	  <published>2010-07-22T12:47:36+08:00</published>
		  <summary type="html"><![CDATA[谁都知道在Unity中可以编写shader,可是他们很难写,尤其当你需要每个像素的灯光和阴影产生交互.在Unity3中,除了要包含旧的支持,你的shader也必须支持新的递延照明渲染(Deferred Lighting).所以我们决定要让shader更容易写!<br/><br/>一年多以前,我曾认为&#34;着色器马死的快(呵呵,着色器必死,相关的帖子<a href="http://aras-p.info/blog/2009/05/05/shaders-must-die/" target="_blank" rel="external">http://aras-p.info/blog/2009/05/05/shaders-must-die/</a>,<a href="http://aras-p.info/blog/2009/05/07/shaders-must-die-part-2/" target="_blank" rel="external">http://aras-p.info/blog/2009/05/07/shaders-must-die-part-2/</a>,<a href="http://aras-p.info/blog/2009/05/10/shaders-must-die-part-3/" target="_blank" rel="external">http://aras-p.info/blog/2009/05/10/shaders-must-die-part-3/</a>)&#34;.而现在我们正在开发Unity3,我们称之为表面着色(Surface Shaders),因为我觉得&#34;着色器马死的快&#34;做个这个新物种的名称不会得到老板认同.<br/><br/>主题思想就是在90%的情况下我之需要声明表面的特性就可以了.以后就想说:<br/><br/>嘿,反照率来自这个纹理和那个纹理的混合以及法线贴图.使用Blinn-Phong照明模式,别再来烦我了嗷!<br/><br/>像上面说的,我没有理会是否要提前或者延迟渲染,或者如何使用各种灯的类型去处理,或者要设置有多少效果将用灯光来呈现,或者用将有多少会产生实时阴影的部分,等等都不是我感兴趣的!这些肮脏的渲染工作怎么能让程序去做?!得让程序员解脱!<br/><br/>当然这不是一个新概念.大部分图形渲染编辑器都没用像素色(pixel color)去作为最后输出的节点,而是用了他们的一些可以描述他们的表面参数(弥漫,镜面,法线)作为节点,所有的灯光代码也不是针对作色器本身图形.OpenShadingLanguage(<a href="http://code.google.com/p/openshadinglanguage/" target="_blank" rel="external">http://code.google.com/p/openshadinglanguage/</a>)是和我们想的类似的一个想法,不过因为它是针对电影的脱机渲染,所有它更丰富更复杂.<br/><br/>下面是一个简单的例子,但它很完整,演示了Unity3的漫反射贴图和法线贴图的Shader.<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.1vr.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> shader 代码</div><pre class="brush:shader;first-line:"><br/> Shader &#34;Example/Diffuse Bump&#34; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;Properties {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_MainTex (&#34;Texture&#34;, 2D) = &#34;white&#34; {}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_BumpMap (&#34;Bumpmap&#34;, 2D) = &#34;bump&#34; {}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;SubShader {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tags { &#34;RenderType&#34; = &#34;Opaque&#34; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGPROGRAM<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#pragma surface surf Lambert<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct Input {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float2 uv_MainTex;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float2 uv_BumpMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sampler2D _MainTex;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sampler2D _BumpMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void surf (Input IN, inout SurfaceOutput o) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDCG<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;Fallback &#34;Diffuse&#34;<br/>&nbsp;&nbsp;}</pre></div><br/><br/>将它赋予给漂亮的模型和贴图,它可以产生漂亮的图像!怎能不酷?!<br/><img src="http://www.1vr.cn/attachments/month_1007/201007221243050.png" border="0" alt=""/><br/><br/>这个是不是真的很有趣,将着色器的复杂语法简单化,后面再为一些老古董机器做一些后备声明.剩下的只有CG语言/HLSL的代码,然后通过自动生成最终代码提高图像效果.<br/><br/>我们来解析一下这段着色器代码:<br/><ul><br/><li>#pragma surface surf Lambert:这是一个表面着色(surf)用的主要函数,和用Lambert照明模式.<br/></li><li>struct Input:表面作色器输入的数据.这可以有多种定义,用来描述每个顶点和像素的对应关系.上面这段代码里它有两个纹理坐标.<br/></li><li>surf函数,表面的实际着色代码.需要由SurfaceOutput(预定义结构)写入.它可以写入自定义结构,实际的代码只是写反照率和法线的输出.</li></ul><br/><br/>什么是生成？<br/><br/>Unity的&#34;表面着色器代码生成器&#34;将利用这个方式产生实际的顶点和像素着色器,并将它编译好给各种目标平台.在Unity3中将默认支持这种着色器:<br/><br/><ul><br/><li>提前渲染和递延渲染<br/></li><li>预计算对象物体有无光照.<br/></li><li>平行光,点光源,射灯的cookie阴影有无,实时光影的有无.<br/></li><li>对于提前渲染,它会在编译时计算每个顶点的灯的效果反映.<br/></li><li>延迟照明将会产生法线贴图,镜面贴图最后通过灯光的反射率和任何其它光照光影的反映.<br/></li><li>它可以选择性的生成一个阴影,比如一些复杂的通道贴图产生的阴影.</li></ul><br/><br/>例如下面的代码通过提供的一个方向灯,4个顶点光源,三个阴影光被编译为一个提前渲染的可选光影的shader.我建议你滚动页面往下看看就好了:<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.1vr.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">#pragma vertex vert_surf<br/>#pragma fragment frag_surf<br/>#pragma fragmentoption ARB_fog_exp2<br/>#pragma fragmentoption ARB_precision_hint_fastest<br/>#pragma multi_compile_fwdbase<br/>#include &#34;HLSLSupport.cginc&#34;<br/>#include &#34;UnityCG.cginc&#34;<br/>#include &#34;Lighting.cginc&#34;<br/>#include &#34;AutoLight.cginc&#34;<br/>struct Input {<br/>&#160;&#160;&#160;&#160;float2 uv_MainTex : TEXCOORD0;<br/>};<br/>sampler2D _MainTex;<br/>sampler2D _BumpMap;<br/>void surf (Input IN, inout SurfaceOutput o)<br/>{<br/>&#160;&#160;&#160;&#160;o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;<br/>&#160;&#160;&#160;&#160;o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_MainTex));<br/>}<br/>struct v2f_surf {<br/>&nbsp;&nbsp;V2F_POS_FOG;<br/>&nbsp;&nbsp;float2 hip_pack0 : TEXCOORD0;<br/>&nbsp;&nbsp;#ifndef LIGHTMAP_OFF<br/>&nbsp;&nbsp;float2 hip_lmap : TEXCOORD1;<br/>&nbsp;&nbsp;#else<br/>&nbsp;&nbsp;float3 lightDir : TEXCOORD1;<br/>&nbsp;&nbsp;float3 vlight : TEXCOORD2;<br/>&nbsp;&nbsp;#endif<br/>&nbsp;&nbsp;LIGHTING_COORDS(3,4)<br/>};<br/>#ifndef LIGHTMAP_OFF<br/>float4 unity_LightmapST;<br/>#endif<br/>float4 _MainTex_ST;<br/>v2f_surf vert_surf (appdata_full v) {<br/>&nbsp;&nbsp;v2f_surf o;<br/>&nbsp;&nbsp;PositionFog( v.vertex, o.pos, o.fog );<br/>&nbsp;&nbsp;o.hip_pack0.xy = TRANSFORM_TEX(v.texcoord, _MainTex);<br/>&nbsp;&nbsp;#ifndef LIGHTMAP_OFF<br/>&nbsp;&nbsp;o.hip_lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;<br/>&nbsp;&nbsp;#endif<br/>&nbsp;&nbsp;float3 worldN = mul((float3x3)_Object2World, SCALED_NORMAL);<br/>&nbsp;&nbsp;TANGENT_SPACE_ROTATION;<br/>&nbsp;&nbsp;#ifdef LIGHTMAP_OFF<br/>&nbsp;&nbsp;o.lightDir = mul (rotation, ObjSpaceLightDir(v.vertex));<br/>&nbsp;&nbsp;#endif<br/>&nbsp;&nbsp;#ifdef LIGHTMAP_OFF<br/>&nbsp;&nbsp;float3 shlight = ShadeSH9 (float4(worldN,1.0));<br/>&nbsp;&nbsp;o.vlight = shlight;<br/>&nbsp;&nbsp;#ifdef VERTEXLIGHT_ON<br/>&nbsp;&nbsp;float3 worldPos = mul(_Object2World, v.vertex).xyz;<br/>&nbsp;&nbsp;o.vlight += Shade4PointLights (<br/>&nbsp;&nbsp;&nbsp;&nbsp;unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0,<br/>&nbsp;&nbsp;&nbsp;&nbsp;unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3,<br/>&nbsp;&nbsp;&nbsp;&nbsp;unity_4LightAtten0, worldPos, worldN );<br/>&nbsp;&nbsp;#endif // VERTEXLIGHT_ON<br/>&nbsp;&nbsp;#endif // LIGHTMAP_OFF<br/>&nbsp;&nbsp;TRANSFER_VERTEX_TO_FRAGMENT(o);<br/>&nbsp;&nbsp;return o;<br/>}<br/>#ifndef LIGHTMAP_OFF<br/>sampler2D unity_Lightmap;<br/>#endif<br/>half4 frag_surf (v2f_surf IN) : COLOR {<br/>&nbsp;&nbsp;Input surfIN;<br/>&nbsp;&nbsp;surfIN.uv_MainTex = IN.hip_pack0.xy;<br/>&nbsp;&nbsp;SurfaceOutput o;<br/>&nbsp;&nbsp;o.Albedo = 0.0;<br/>&nbsp;&nbsp;o.Emission = 0.0;<br/>&nbsp;&nbsp;o.Specular = 0.0;<br/>&nbsp;&nbsp;o.Alpha = 0.0;<br/>&nbsp;&nbsp;o.Gloss = 0.0;<br/>&nbsp;&nbsp;surf (surfIN, o);<br/>&nbsp;&nbsp;half atten = LIGHT_ATTENUATION(IN);<br/>&nbsp;&nbsp;half4 c;<br/>&nbsp;&nbsp;#ifdef LIGHTMAP_OFF<br/>&nbsp;&nbsp;c = LightingLambert (o, IN.lightDir, atten);<br/>&nbsp;&nbsp;c.rgb += o.Albedo * IN.vlight;<br/>&nbsp;&nbsp;#else // LIGHTMAP_OFF<br/>&nbsp;&nbsp;half3 lmFull = DecodeLightmap (tex2D(unity_Lightmap, IN.hip_lmap.xy));<br/>&nbsp;&nbsp;#ifdef SHADOWS_SCREEN<br/>&nbsp;&nbsp;c.rgb = o.Albedo * min(lmFull, atten*2);<br/>&nbsp;&nbsp;#else<br/>&nbsp;&nbsp;c.rgb = o.Albedo * lmFull;<br/>&nbsp;&nbsp;#endif<br/>&nbsp;&nbsp;c.a = o.Alpha;<br/>&nbsp;&nbsp;#endif // LIGHTMAP_OFF<br/>&nbsp;&nbsp;return c;<br/>}</div></div><br/>在90行的代码中,10行是原始的着色器代码,其余的代码在Unity2的时候几乎都要手写的.别急,这只是写了一点提前渲染的部分!还需要写递延渲染,可选阴影等等灯.<br/><br/>因此,现在应该会比较容易的写着色器(对于我来说至少).Unity的用户也愿意少写代码,少些至少三倍的代码何乐不为?它还会有一些改变以适应Unity下一步新的照明系统.<br/><br/>预定义的输入值<br/><br/>输入结构可以包含纹理坐标和一些预定义的值,例如查看的方向,世界空间的位置,世界空间的反射矢量灯.例如,如果你利用世界空间反射矢量(如自发光),在模型表面做一些CubeMap反射效果(递延渲染的反射将不会计算,因为它不会产生效果,所以也不需要考虑反射向量),<br/><br/><img src="http://www.1vr.cn/attachments/month_1007/20100722124338l.png" border="0" alt=""/><br/><br/>用一个小例子说明做简单的灯光渲染:<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.1vr.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> shader 代码</div><pre class="brush:shader;first-line:"> #pragma surface surf Lambert<br/>&nbsp;&nbsp;struct Input {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float2 uv_MainTex;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float2 uv_BumpMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float3 viewDir;<br/>&nbsp;&nbsp;};<br/>&nbsp;&nbsp;sampler2D _MainTex;<br/>&nbsp;&nbsp;sampler2D _BumpMap;<br/>&nbsp;&nbsp;float4 _RimColor;<br/>&nbsp;&nbsp;float _RimPower;<br/>&nbsp;&nbsp;void surf (Input IN, inout SurfaceOutput o) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;half rim =<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.Emission = _RimColor.rgb * pow (rim, _RimPower);<br/>&nbsp;&nbsp;}</pre></div><br/><br/>顶点修改器<br/><br/>它可以自定义顶点修饰功能,用来修改或者产生每个顶点的数据.像风吹动树的动画,草的摇摆等等.<br/><br/>我最喜欢沿着法线顶点的方向去移动顶点.像打肿了的效果…<br/><br/><img src="http://www.1vr.cn/attachments/month_1007/20100722124352r.png" border="0" alt=""/><br/><br/>自定义光照模型<br/><br/>有一个内置的简单的光照模型,你也可以指定你自己的.A照明模式只不过将常用的光的参数,方向衰减,而没包含一些提前渲染和延迟渲染以及一些不长用到的方法.因此,对于任何奇特的效果你都要通过提供自定义光照模型来完成.<br/><br/><img src="http://www.1vr.cn/attachments/month_1007/20100722124406y.png" border="0" alt=""/><br/><br/>例如wrapped-Lambert光照模式:<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.1vr.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> shader 代码</div><pre class="brush:shader;first-line:">&nbsp;&nbsp;#pragma surface surf WrapLambert<br/>&nbsp;&nbsp;half4 LightingWrapLambert (SurfaceOutput s, half3 dir, half atten) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir = normalize(dir);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;half NdotL = dot (s.Normal, dir);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;half diff = NdotL * 0.5 + 0.5;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;half4 c;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten * 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.a = s.Alpha;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return c;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;struct Input {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float2 uv_MainTex;<br/>&nbsp;&nbsp;};<br/>&nbsp;&nbsp;sampler2D _MainTex;<br/>&nbsp;&nbsp;void surf (Input IN, inout SurfaceOutput o) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;<br/>&nbsp;&nbsp;}</pre></div><br/><br/>幕后<br/><br/>我们使用Ryan Gordon的mojoshder(<a href="http://hg.icculus.org/icculus/mojoshader/" target="_blank" rel="external">http://hg.icculus.org/icculus/mojoshader/</a>)中的HLSL解析器来分析原始的表面着色器代码.找出有哪些成员结构,有哪些函数原型等等.在这个阶段做的一些错误检查是为了告诉用户它的面函数原型是错误或者他的结构缺少必要的成员.<br/><br/>为了弄清楚着色器实际的照明关系,我们做了像素着色器的小工具来编译CG语言和使用CG语言的API查询使用了哪些输入输出.这样我们可以算出例如一个法线贴图实际不用递延照明并也节省了一些顶点着色器指令和一个纹理坐标值.<br/><br/>生成的代码最终根据目标平台被编译.Cg为Windows/Mac,XDK HLSL为Xbox 360,PS3 Cg为PS3,和我们自己创造的HLSL2GLSL为iPhone, Android和即将退出的Unity NativeClient(<a href="http://blogs.unity3d.com/2010/05/19/google-android-and-the-future-of-games-on-the-web/" target="_blank" rel="external">http://blogs.unity3d.com/2010/05/19/google-android-and-the-future-of-games-on-the-web/</a>).<br/><br/>就这样,我们会继续做下去,等到Unity3发布的时候,我希望更多的人会尝试写着色器!<br/><br/>转载请注明来自1Vr.Cn,原文地址:<a href="http://blogs.unity3d.com/2010/07/17/unity-3-technology-surface-shaders/" target="_blank" rel="external">http://blogs.unity3d.com/2010/07/17/unity-3-technology-surface-shaders/</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=542" /> 
	  <id>http://www.1vr.cn/default.asp?id=542</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[有关Unity和iOS4.0的新说明,以及Unity3支持mod格式]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-07-05T20:54:37+08:00</updated>
	  <published>2010-07-05T20:54:37+08:00</published>
		  <summary type="html"><![CDATA[亲爱的Unity用户,我再次感谢你们的耐心.感谢你们的支持!<br/><br/>很多人都对开发移动设备兴趣很大,特别是使用Unity创造iPhone<a href="Http://1Vr.Cn" target="_blank">游戏</a>而叫棒!,我们一直密切的关注这iOS 4.0的开发服务条款.虽然我们也相信Unity使用C#和JavaScript会没问题的.有一些没有被<a href="Http://1Vr.Cn" target="_blank">苹果</a>公司证实的小道消息.不过,<a href="Http://1Vr.Cn" target="_blank">苹果</a>公司今天仍审批Unity开发的<a href="Http://1Vr.Cn" target="_blank">游戏</a>,也挑选了一些优秀的Unity<a href="Http://1Vr.Cn" target="_blank">游戏</a>做推荐.一直以来我们也投入大的经历和资源在Unity iPhone的开发,其中包括即将到来的Unity3.0的许多新功能.但是由于新的开发服务条款的公布,我们也开始了一项应急方案的工作,以防万一.现在请允许解释一下这应急计划的具体内容,让每个人都知道&#34;B计划&#34;的模样.<br/><br/>你可能知道,Unity大多是通过C++优化和通过Objective-C封装的.<a href="Http://1Vr.Cn" target="_blank">游戏</a>逻辑是由开发者用C#和JavaScript写的,这两者都运行在.NET中.这个方案的优点在于,我们能够不用复杂的语言实现我们想要的功能,.NET能快速的开发,且接近于即时的编译,又能在同一时间生成高度优化的代码.并且在iPhone上最终编译成符合旧的iOS服务条款的静态机器码.此外iPhone也很容易利用Objective-C代码去访问API,诸如<a href="Http://1Vr.Cn" target="_blank">游戏</a>中心等等,这真的是一个两全其美的事情.<br/><br/>由于Unity支持.NET可能与服务的新条款冲突,我们正在研究一种可以在整个<a href="Http://1Vr.Cn" target="_blank">游戏</a>中不创建任何使用.NET代码的解决方案.这种情况下所有的脚本API使用c++来操纵.这当然不理想,像有代码量会加长很多.相比C#和JavaScript,C++无疑复杂的多.<br/><br/>但老实说,这并不太糟糕.Unity仍旧有资源管理,着色语言等一些列工具,当然还有<a href="Http://1Vr.Cn" target="_blank">引擎</a>的优化.我们也同样保持了Unity的JavaScript和C#的特点:享受似的开发工作.变量仍旧可以在检视面板中去定义.从本质上讲我们正在创建一个基于C++的.NET编译器,使得我们能纯粹的托管C++在Webplayer和其它平台上.在iOS中C++代码将被<a href="Http://1Vr.Cn" target="_blank">苹果</a>的Xcode工具所编译.这确实是非常强大的组合.在Unity的编辑器,你可以快速的高效率的开发,在设备上你又可以拥有纯粹的native C.<br/><br/>但是,事实上,当你做一个简单的<a href="Http://1Vr.Cn" target="_blank">游戏</a>逻辑时,C++并不是十分复杂,让我们看几个不同的例子.<br/><br/>这是一个非常简单的JavaScript脚本,用来旋转<a href="Http://1Vr.Cn" target="_blank">游戏</a>中的物体.<br/><br/><div align="center"><img src="http://www.1vr.cn/attachments/month_1007/20100705204946h.png" border="0" alt=""/></div><br/><br/>这是用C++编写相同功能的代码.<br/><br/><div align="center"><img src="http://www.1vr.cn/attachments/month_1007/20100705204955o.png" border="0" alt=""/></div><br/><br/>正如你可以它们基本相同,并不是差别很大.再举个复杂点的例子<br/>这是在iOS设备上利用重力感应和触摸来控制飞行器飞行和发射导弹的<a href="Http://1Vr.Cn" target="_blank">游戏</a>:<br/><br/><div align="center"><img src="http://www.1vr.cn/attachments/month_1007/20100705205001x.png" border="0" alt=""/></div><br/><br/>下面的同样是由C++来实现相同的功能:<br/><br/><div align="center"><img src="http://www.1vr.cn/attachments/month_1007/20100705205017e.png" border="0" alt=""/></div><br/><br/>同样,与JavaScript对比,我们没有在C++中写太多的代码,甚至与C#相比,它们的差异更小.<br/><br/>我们将继续关注以Unity开发iPhone,iPod touch和iPad.虽然我们不认为C++是编写<a href="Http://1Vr.Cn" target="_blank">游戏</a>代码的最好语言,但是C++在内存占用和设备性能上的巨大优势,这是一个伟大的特点,作为开发者,谁不想更多的减少内存占用和提高<a href="Http://1Vr.Cn" target="_blank">游戏</a>的性能能呢.<br/><br/>我们仍然不能相信<a href="Http://1Vr.Cn" target="_blank">苹果</a>将迫使选择一个具体的语言去开发.正如我先前所说.<a href="Http://1Vr.Cn" target="_blank">苹果</a>公司仍然能通过审批Unity开发的<a href="Http://1Vr.Cn" target="_blank">游戏</a>,可你们也应该放心,如果形势有变化,我们也不用太担心,因为我们已经准备了B计划.<br/><br/>原文:<a href="http://blogs.unity3d.com/2010/07/02/unity-and-ios-4-0-up" target="_blank" rel="external">http://blogs.unity3d.com/2010/07/02/unity-and-ios-4-0-up</a>&#100;ate-iii/<br/><br/>-----------------------------------------------------<br/>在Unity3.0中,我们添加了一个令人振奋的新消息,就是用户能在Unity中能像使用其它资源一样使用*.mod文件中的音乐和声音了.先看看Unity3的视音频功能预览视频吧.<a href="http://blogs.unity3d.com/2010/06/25/unity-3-feature-preview-audio/" target="_blank" rel="external">http://blogs.unity3d.com/2010/06/25/unity-3-feature-preview-audio/</a><br/><br/>当我开始测试Unity新的音频功能的时候,对*.mod文件我只有基本没什么想法.也不知道能做些什么.我就问我们的音频程序员Søren,他说这文件格式体积小,音质还好.所以我肯定和他说让他试试.当比较了文件大小和音频质量后,我很惊讶,我认为这更适合在网页<a href="Http://1Vr.Cn" target="_blank">游戏</a>中传输使用.<br/><br/>这条博文翻译不下去了,太多专业短语不会翻译.放弃了..反正就是说Unity3中支持*.mod文件了.<br/><br/><br/>ps:翻译注明来处1vr.cn,否则MJJ!!<br/> <img src="http://www.1vr.cn/images/smilies/icon_lol.gif" border="0" style="margin:0px 0px -2px 0px" alt=""/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=539" /> 
	  <id>http://www.1vr.cn/default.asp?id=539</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Modo模型烘培入Unity视频教程]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-05-31T11:32:48+08:00</updated>
	  <published>2010-05-31T11:32:48+08:00</published>
		  <summary type="html"><![CDATA[Modo很漂亮,原来想学过,可是...唉.老了.<br/><br/><div align="center"><img src="http://www.1vr.cn/attachments/month_1005/201005311147050.png" border="0" alt=""/></div><br/><br/>教程在线学习地址: <a href="http://v.youku.com/v_show/id_XMTc3NDU0MTY0.html" target="_blank" rel="external">http://v.youku.com/v_show/id_XMTc3NDU0MTY0.html</a>&nbsp;&nbsp;<br/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=533" /> 
	  <id>http://www.1vr.cn/default.asp?id=533</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Maya烘培入Unity教程]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-05-30T23:14:14+08:00</updated>
	  <published>2010-05-30T23:14:14+08:00</published>
		  <summary type="html"><![CDATA[1,给你的模型打上你需要的灯光,添加贴图材质等等..<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530230355j.jpg" border="0" alt=""/><br/>2,渲染你的场景,比如用Mental Ray,你喜欢用什么就用什么.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530230540t.jpg" border="0" alt=""/><br/>3,选择所有物体并使用&#34;Mesh-&gt;Combine&#34;命令.然后给这些物体打开&#34;Cr&#101;ate UVs-&gt;Automatic Mapping&#34;,进行展UV操作.打开&#34;Window-&gt;UV Texture Editor&#34;并检查用于烘培的新的UV.<br/><img src="http://www.1vr.cn/attachments/month_1005/201005302307590.jpg" border="0" alt=""/><br/>4,切换到&#34;Rendering&#34;工具栏,并且确保你要渲染的物体是被选择的,打开&#34;Texture/Lighting-&gt;Batch Bake(mental ray)&#34;对话框,并用如下的设置,然后点击&#34;Convert and close&#34;:<br/><br/>Objects to bake: Sel&#101;cted <br/>Bake to: Texture // IMPORTANT <br/>Bake shadows: checked // IMPORTANT <br/>Keep o&#114;iginal shading network: checked // IMPORTANT <br/>Use bake set override: checked // IMPORTANT <br/>Color mode: light and color // IMPORTANT <br/>Normal direction: surface front // IMPORTANT <br/>Prefix: myLightmap // IMPORTANT this will be the filename of the lightmap TIFF, pick a name you like <br/>X resolution: 2048 // depends on the size of the object usually 2048 is plenty, try various values <br/>Y resolution: same value as &#34;X resolution&#34; <br/>File format: TIFF // others work to as long as Unity can import them <br/>Bits per channel: 8 bits // IMPORTANT <br/>Number of samples: 1 <br/>Bake to one map: checked // IMPORTANT <br/>UV range: Normal [0 to 1] // IMPORTANT, other settings lead to distorted maps <br/>Fill texture seams: 3 // IMPORTANT, this is the bleed area in pixels around each UV shape to avoid jaggy edges later in Unity <br/>Override mesh UV assignments: checked <br/>UV set name: Lightmap<br/><br/>5,Maya将帮你渲染出Lightmap(根据你设置的分辨率和渲染选项不同可能消耗比较长的时间),这个图不会在Maya中显示,这个文件看起来会像下面这种:<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530231123u.jpg" border="0" alt=""/><br/>9,保存场景和切换到Unity,找到Lightmap并导入到Unity中.默认路径&#34;user/[your username]/documents/maya/projects/[maya project name]/renderData/mentalray/lightMap/[prefix].tiff&#34;,选择你的模型,更改材质为&#34;Lightmapped&#34;,并将tiff格式的烘培图文件赋予给它,搞定!<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530231331j.jpg" border="0" alt=""/><br/><br/>原文:<a href="http://forum.unity3d.com/viewtopic.php?t=9606" target="_blank" rel="external">http://forum.unity3d.com/viewtopic.php?t=9606</a><br/>威阿翻译,转载请注明来处1Vr.Cn<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=532" /> 
	  <id>http://www.1vr.cn/default.asp?id=532</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[多维材质模型烘培入Unity教程]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-05-30T22:58:44+08:00</updated>
	  <published>2010-05-30T22:58:44+08:00</published>
		  <summary type="html"><![CDATA[1,这里我有两个对象(装饰物和沙发),你能看见,一共有8张贴图(7张装饰物的贴图,一张沙发贴图).<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530224226c.png" border="0" alt=""/><br/>2,展UVW设置通道为1并点击保存.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530224344f.png" border="0" alt=""/><br/>3,用第一个通道的UV来展通道2的UVW.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530224459d.png" border="0" alt=""/><br/>4,打开烘培图选项,选择&#34;Output into Source&#34;和&#34;Keep Baked Materials&#34;,这个选项将自动更新你原来的材质球而且不使用壳材质.点击&#34;0&#34;键打开烘培窗口.<br/><img src="http://www.1vr.cn/attachments/month_1005/201005302247334.png" border="0" alt=""/><br/>5,效果如下:<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530224816a.png" border="0" alt=""/><br/>6,按下M键打开材质对话框,查看新烘培的材质,在&#34;Self Illumination Slot&#34;中你能看到现在是Lightmap图.导出为Fbx文件.<br/><img src="http://www.1vr.cn/attachments/month_1005/201005302250106.png" border="0" alt=""/><br/>7,打开Unity并且导入这个模型因为3dsmax中用了8张贴图,所以Unity将给模型赋予8个材质,lightmap贴图不能随着到如今来.手动从3dsmax文件夹导入光影图.名字是模型名与Lightingmap结尾.本例中有2个烘培图,分别是sofaLightingMap.TGA, and wallLightingMap.TGA.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530225403j.png" border="0" alt=""/><br/>8,将我们所有的材质都赋予好,现在改变默认材质为&#34;Lightmapped&#34;.我选择&#34;Lighmapped/VertexLit&#34;,然后把对应的烘培图赋予对应的材质.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530225540l.png" border="0" alt=""/><br/>9,好了,烘培图放置正确!效果还不错吧!<br/><img src="http://www.1vr.cn/attachments/month_1005/201005302257357.png" border="0" alt=""/><br/><br/>原文:<a href="http://forum.unity3d.com/viewtopic.php?t=24665" target="_blank" rel="external">http://forum.unity3d.com/viewtopic.php?t=24665</a><br/>威阿翻译,转载请注明1Vr.Cn]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=531" /> 
	  <id>http://www.1vr.cn/default.asp?id=531</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[3dsmax烘培导入Unity中小教程.]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-05-30T22:33:34+08:00</updated>
	  <published>2010-05-30T22:33:34+08:00</published>
		  <summary type="html"><![CDATA[1,当你给模型UVW处理完后保存UV为*.uvw文件.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530221830t.png" border="0" alt=""/><br/>2,创建一个新的uvw并改变它的通道为2.载入你刚才创建的uvw文件,当你用automatic uvw时候,它会给你更好的效果.<br/><img src="http://www.1vr.cn/attachments/month_1005/201005302220455.png" border="0" alt=""/><br/>3,按下&#34;0&#34;键打开render to texture对话框.选择&#34;Use Existing Channel&#34;,改变通道为&#34;2&#34;,选择添加&#34;Lightingmap&#34;.<br/><img src="http://www.1vr.cn/attachments/month_1005/201005302222230.png" border="0" alt=""/><br/>4,预览窗口看到的图片不是最终的,实际图片在你选择的保存目录中,通常在&#34;My Documents/3dsmax/sceneassets/images&#34;下.名称和你所选择的物体名相同并有&#34;LightingMap&#34;标志的类型为TGA的文件.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530222416q.png" border="0" alt=""/><br/>5,打开材质球对话框,用&#34;Pick Material from Object&#34;并复制&#34;Pick Material from Object&#34;到一个空的材质球中,因为*.fbx导出器目前还不支持&#34;Shell Material&#34;.<br/><img src="http://www.1vr.cn/attachments/month_1005/201005302226321.png" border="0" alt=""/><br/>6,完成后将这个新材质球赋予你的模型,导出这个模型为fbx格式,本例中用cm单位,勾选了embed texture.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530222824q.png" border="0" alt=""/><br/>7,当你打开你的Unity项目并导入这个模型,你仅能看到只导入了diffuse贴图.而没有LightMap贴图.我的方法是把Lightmap贴图复制添加到这个模型的fbm目录中.<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530223057q.png" border="0" alt=""/><br/>8,将Shader改为Lightmapped,并将Lightmap贴图拖拽到空位处.完成了!<br/><img src="http://www.1vr.cn/attachments/month_1005/20100530223228a.jpg" border="0" alt=""/><br/><br/>原文:<a href="http://forum.unity3d.com/viewtopic.php?t=24665" target="_blank" rel="external">http://forum.unity3d.com/viewtopic.php?t=24665</a><br/>威阿翻译,转载注明来处1Vr.Cn]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=530" /> 
	  <id>http://www.1vr.cn/default.asp?id=530</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Unity公司介绍]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-05-29T23:14:14+08:00</updated>
	  <published>2010-05-29T23:14:14+08:00</published>
		  <summary type="html"><![CDATA[基本概况<br/>Unity技术公司主要开发革命性<a href="Http://1Vr.Cn" target="_blank">游戏</a>开发工具Unity,能创造高质量的3D互动内容-包括视频<a href="Http://1Vr.Cn" target="_blank">游戏</a>,模拟训练,医疗和建筑可视化,同样也可以应用于网络,移动设备和<a href="Http://1Vr.Cn" target="_blank">游戏</a>机的开发.<br/><br/>使命<br/>让<a href="Http://1Vr.Cn" target="_blank">游戏</a>开发民主化,让人人都可以创造高品质的3D互动作品!<br/><br/>部门分布<br/>丹麦的旧金山,立陶宛和英国等都有办事处.<br/><br/>创办人<br/>大卫黑尔加松(首席执行官)<br/>尼古拉斯弗朗西斯(内容总监)<br/>约阿希姆安特(首席技术官)<br/><br/>客户<br/>有超过130K个注册用户,包含Bigpoint, Cartoon Network, Coca-Cola, Disney, Electronic Arts, LEGO, Microsoft, NASA, Panasonic, Ubisoft, Warner Bros等等大的,小的工作室,独立的开发人员,学生和业余爱好者.想看他们开发了什么,到Unity<a href="Http://1Vr.Cn" target="_blank">游戏</a>展示名单吧(<a href="http://unity3d.com/gallery/game-list/" target="_blank" rel="external">http://unity3d.com/gallery/game-list/</a>),<br/><br/>财务与增长<br/><br/>Unity技术公司是一个在美国除掉税收外由50%由私人控股的公司;非<a href="Http://1Vr.Cn" target="_blank">游戏</a>相关收入占1/3,其他大部分收入来自像Facebook和MySpace和iPhone--近1000个Unity制作的<a href="Http://1Vr.Cn" target="_blank">游戏</a>在AppStore上线,在收费排行榜或者是最高票房<a href="Http://1Vr.Cn" target="_blank">游戏</a>上10%-20%都是Unity制作的<a href="Http://1Vr.Cn" target="_blank">游戏</a>,像Skee-Ball, Ravensworld: The Fallen King 和 Zombieville USA.<br/><br/>奖项与荣誉<br/><br/>2010年<br/>Unity技术公司被信息周刊称为&#34;最有吸引力的公司&#34;.<br/>Unity技术公司入围旧金山商业时报科技创新企业家奖.<br/><a href="Http://1Vr.Cn" target="_blank">游戏</a>&#34;Max &amp; the Magic Marker&#34;在<a href="Http://1Vr.Cn" target="_blank">游戏</a>开发者大会(GDC)获得玩家玩次数最多的<a href="Http://1Vr.Cn" target="_blank">游戏</a>奖.<br/>客户D2团队被评为Launcher Dogs:March o&#114;der 和 Emplace training应用程序在<a href="Http://1Vr.Cn" target="_blank">游戏</a>技术的DoD<a href="Http://1Vr.Cn" target="_blank">游戏</a>比赛上获得新技术新革新称号.<br/><br/>2009年<br/>Unity技术公司被Gamasutra评为本年度前五的<a href="Http://1Vr.Cn" target="_blank">游戏</a>公司之一.<br/>Unity技术公司是一个开始记入<a href="Http://1Vr.Cn" target="_blank">游戏</a>杂志&#34;技术革命&#34;的公司.<br/><br/>产品<br/>Unity, Unity Pro, Asset Server, iPhone, iPhone Pro<br/><br/>最广泛的平台支持<br/>目前:iPhone/iPod Touch/iPad, Mac, PC, Web, Wii, Xbox 360<br/>即将:Android, PlayStation3<br/><br/>时间线:<br/>2010<br/>五月:Unity Web Player每月安装量200万以上,而且仍在增长.现在总装机量达到3000万.<br/>五月:Unity安装超过25万,每月都回有30000新装用户,而且逐月在增长,增长率约为15%.<br/>四月:EA出品Tiger Woods Online.<br/>二月:Unity用户超过100000!<br/><br/>2009<br/>Unite &#39;09开发者会议上推出免费版.<br/>公司规模扩大三倍.<br/>红杉资本将550万美元投资给David Gardner 和 Diane Green.红杉资本是一个非常著名的投资公司,投资过如<a href="Http://1Vr.Cn" target="_blank">苹果</a>,EA,Google和NVIDIA.<br/>David Gardner:EA前任Co-Founder和Atari的CEO.<br/>Diane Greene:VMware的创始人和前任CEO.<br/><br/>2008:Unity iPhone推出<br/>2007:Unity 2.0推出<br/>2005:Unity 1.0推出<br/>2001:Unity开始开发!<br/><br/>转载请注明来处1Vr.Cn]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=529" /> 
	  <id>http://www.1vr.cn/default.asp?id=529</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[邮件:Unity iPhone 1.7完美支持iPad!]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-04-24T14:03:29+08:00</updated>
	  <published>2010-04-24T14:03:29+08:00</published>
		  <summary type="html"><![CDATA[本月初,Unity公司发布了Unity iPhone 1.7,在这次更新中含有一个非常重要而且令人兴奋的功能.和往常一样,这样小版本你的更新免费更新给已经购买Unity的人.这个新版提供了<a href="Http://1Vr.Cn" target="_blank">苹果</a>最新设备iPad的支持的开发!<br/><br/><div align="center"><img src="http://www.1vr.cn/attachments/month_1004/20100424140644e.jpg" border="0" alt=""/></div><br/><br/>新功能特点:<br/><br/>支持iPad发布<br/>开发者现在可以选择为iPhone开发也可以为iPad开发.<br/><br/>iPad模拟器的支持<br/>新版本增加了iPad公司模拟器的支持,即使你没有iPad硬件设备,你也可以开发iPad的应用程序.<br/><br/>支持通用的应用程序<br/><br/>你可以使用Unity iPhone建立通用的应用程序,使你的应用程序可以自动在iPad,iPhone,iPod-touch上工作.<br/><br/>如果你想看其他的新改进,你可以访问:<a href="http://unity3d.com/unity/whats-new/iphone-1.7." target="_blank" rel="external">http://unity3d.com/unity/whats-new/iphone-1.7.</a>再次提醒你,这次更新针对购买了Unity的朋友是免费更新的,只要下载新的版本,就可以开始使用新功能!<br/><br/>关于<a href="Http://1Vr.Cn" target="_blank">苹果</a>iPhone OS4的一些话<br/><br/>大多数人都已经知道,<a href="Http://1Vr.Cn" target="_blank">苹果</a>公司为iPhone OS4推出了新的服务条款(TOS),有一些Unity用户比较关注它.虽然现在我们还没有一个明确的声明,但是我们已经联系到了<a href="Http://1Vr.Cn" target="_blank">苹果</a>公司并进行了友好的会谈,而且很明显,这个条款不是针对Unity的.我们也会继续努力,确保符合遵守新的条款.虽然确保遵守新的条款可能要我们再做出其他额外的工作,我们还会努力做好,我们承诺的目标是提供不间断的兼容TOS的工具,你和我们都相信Unity将能做到这一点.<br/><br/>如果你想留意我们官方对这件事情的最新进展,请留意我们公司的博客,并查看我们的首席执行官大卫黑尔加松的博客:<a href="http://blogs.unity3d.com/author/david/" target="_blank" rel="external">http://blogs.unity3d.com/author/david/</a>,我们要感谢所有人的耐心,而且我们也知道这次工作的不确定性,但我们会尽一切努力,确保取得好的成果!<br/><br/>感谢大家使用Unity,祝福大家一切都好!<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=528" /> 
	  <id>http://www.1vr.cn/default.asp?id=528</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Unity中雷达效果的制作]]></title>
	  <author>
		 <name>威阿</name>
		 <uri>http://www.1vr.cn/</uri>
		 <email>MineVR#163.Com</email>
	  </author>
	  <category term="" scheme="http://www.1vr.cn/default.asp?cateID=5" label="技术日志" /> 
	  <updated>2010-04-13T12:03:58+08:00</updated>
	  <published>2010-04-13T12:03:58+08:00</published>
		  <summary type="html"><![CDATA[想给你<a href="Http://1Vr.Cn" target="_blank">游戏</a>中增加个雷达么?Unity中可以很容易增加一个雷达.就像下面这样.当然.你可以让美术把雷达做的更好看一些.<br/><br/><div align="center"><img src="http://www.1vr.cn/attachments/month_1004/20100413120128h.jpg" border="0" alt=""/></div><br/><br/>将下面的脚本放在一个<a href="Http://1Vr.Cn" target="_blank">游戏</a>对象上,给&#34;blip&#34;设置一个纹理.相当于雷达的信号效果.选择一个纹理作为雷达的背景(radarBG),设置地图在屏幕上的位置,设置一个<a href="Http://1Vr.Cn" target="_blank">游戏</a>对象用于你雷达的centerObject(通常是目前的玩家对象).确保所有的&#34;敌人&#34;的标签tag都是&#34;Enemy&#34;.之后你就可以在你的<a href="Http://1Vr.Cn" target="_blank">游戏</a>中看到雷达了.<br/><br/>两种语言任选其一.<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.1vr.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> js 代码</div><pre class="brush:js;first-line:"><br/>@script ExecuteInEditMode()<br/>// radar! by PsychicParrot, adapted from a Blitz3d script found in the public domain online somewh&#101;re ..<br/><br/>//Modified by Dastardly Banana to add radar size configuration, different colors for enemies in different states (patrolling o&#114; chasing), ability to move radar to either one of 9 preset locations o&#114; to custom location.<br/><br/>//some lines are particular to our AI script, you will need to change &#34;EnemyAINew&#34; to the name of your AI script, and change &#34;isChasing&#34; to the boolean within that AI script that is true when the enemy is active/can see the player/is chasing the player.<br/><br/>var blip : Texture; // texture to use when the enemy isn&#39;t chasing<br/>var blipChasing : Texture; //When Chasing<br/>var radarBG : Texture;<br/><br/>var centerObject : Transform;<br/>var mapScale = 0.3;<br/>var mapSizePercent = 15;<br/><br/>var checkAIscript : boolean = true;<br/>var enemyTag = &#34;Enemy&#34;;<br/><br/>enum radarLocationValues {topLeft, topCenter, topRight, middleLeft, middleCenter, middleRight, bottomLeft, bottomCenter, bottomRight, custom}<br/>var radarLocation : radarLocationValues = radarLocationValues.bottomLeft;<br/><br/>private var mapWidth : float;<br/>private var mapHeight : float;<br/>private var mapCenter : Vector2;<br/>var mapCenterCustom : Vector2;<br/><br/>function Start () {<br/>&nbsp;&nbsp;&nbsp;&nbsp;setMapLocation();&nbsp;&nbsp; <br/>}<br/><br/>function OnGUI () {<br/>//&nbsp;&nbsp;GUI.matrix = Matrix4x4.TRS (Vector3.zero, Quaternion.identity, Vector3(Screen.width / 600.0, Screen.height / 450.0, 1));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Draw player blip (centerObject)<br/>&nbsp;&nbsp;&nbsp;&nbsp;bX=centerObject.transform.position.x * mapScale;<br/>&nbsp;&nbsp;&nbsp;&nbsp;bY=centerObject.transform.position.z * mapScale;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;GUI.DrawTexture(Rect(mapCenter.x - mapWidth/2,mapCenter.y-mapHeight/2,mapWidth,mapHeight),radarBG);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Draw blips for Enemies<br/>&nbsp;&nbsp;&nbsp;&nbsp;DrawBlipsForEnemies();<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>}<br/>&nbsp;&nbsp;<br/>function drawBlip(go,aTexture){<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;centerPos=centerObject.position;<br/>&nbsp;&nbsp;&nbsp;&nbsp;extPos=go.transform.position;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// first we need to get the distance of the enemy from the player<br/>&nbsp;&nbsp;&nbsp;&nbsp;dist=Vector3.Distance(centerPos,extPos);<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;dx=centerPos.x-extPos.x; // how far to the side of the player is the enemy?<br/>&nbsp;&nbsp;&nbsp;&nbsp;dz=centerPos.z-extPos.z; // how far in front o&#114; behind the player is the enemy?<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// what&#39;s the angle to turn to face the enemy - compensating for the player&#39;s turning?<br/>&nbsp;&nbsp;&nbsp;&nbsp;deltay=Mathf.Atan2(dx,dz)*Mathf.Rad2Deg - 270 - centerObject.eulerAngles.y;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// just basic trigonometry to find the point x,y (enemy&#39;s location) given the angle deltay<br/>&nbsp;&nbsp;&nbsp;&nbsp;bX=dist*Mathf.Cos(deltay * Mathf.Deg2Rad);<br/>&nbsp;&nbsp;&nbsp;&nbsp;bY=dist*Mathf.Sin(deltay * Mathf.Deg2Rad);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;bX=bX*mapScale; // scales down the x-coordinate so that the plot stays within our radar<br/>&nbsp;&nbsp;&nbsp;&nbsp;bY=bY*mapScale; // scales down the y-coordinate so that the plot stays within our radar<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(dist&lt;=mapWidth*.5/mapScale){ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// this is the diameter of our largest radar circle<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GUI.DrawTexture(Rect(mapCenter.x+bX,mapCenter.y+bY,4,4),aTexture);<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/> <br/>}<br/> <br/>function DrawBlipsForEnemies(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;//You will need to replace isChasing with a variable from your AI script that is true when&nbsp;&nbsp;&nbsp;&nbsp; the enemy is chasing the player, o&#114; doing watever you want it to be doing when it is red on&nbsp;&nbsp;&nbsp;&nbsp;the radar.<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//You will need to replace &#34;EnemyAINew with the name of your AI script<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Find all game objects tagged Enemy<br/>&nbsp;&nbsp;&nbsp;&nbsp;var gos : GameObject[];<br/>&nbsp;&nbsp;&nbsp;&nbsp;gos = GameObject.FindGameObjectsWithTag(enemyTag); <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;var distance = Mathf.Infinity; <br/>&nbsp;&nbsp;&nbsp;&nbsp;var position = transform.position; <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;// Iterate through them and call drawBlip function<br/>&nbsp;&nbsp;&nbsp;&nbsp;for (var go : GameObject in gos)&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var blipChoice : Texture = blip;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(checkAIscript){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var aiScript : EnemyAI = go.GetComponent(&#34;EnemyAI&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(aiScript.isChasing)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blipChoice = blipChasing;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawBlip(go,blipChoice);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/> <br/>}<br/><br/>function setMapLocation () {<br/>&nbsp;&nbsp;&nbsp;&nbsp;mapWidth = Screen.width*mapSizePercent/100.0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;mapHeight = mapWidth;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//sets mapCenter based on enum sel&#101;ction<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(radarLocation == radarLocationValues.topLeft){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(mapWidth/2, mapHeight/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.topCenter){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(Screen.width/2, mapHeight/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.topRight){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(Screen.width-mapWidth/2, mapHeight/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.middleLeft){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(mapWidth/2, Screen.height/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.middleCenter){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(Screen.width/2, Screen.height/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.middleRight){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(Screen.width-mapWidth/2, Screen.height/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.bottomLeft){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(mapWidth/2, Screen.height - mapHeight/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.bottomCenter){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(Screen.width/2, Screen.height - mapHeight/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.bottomRight){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = Vector2(Screen.width-mapWidth/2, Screen.height - mapHeight/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;} else if(radarLocation == radarLocationValues.custom){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapCenter = mapCenterCustom;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>} </pre></div><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.1vr.cn/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> csharp 代码</div><pre class="brush:csharp;first-line:">using UnityEngine;<br/>using System.Collections;<br/><br/>public class Radar : MonoBehaviour<br/>{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public enum RadarTypes : int {Textured, Round, Transparent};<br/>&nbsp;&nbsp;&nbsp;&nbsp;public enum RadarLocations : int {TopLeft, TopCenter, TopRight, BottomLeft, BottomCenter, BottomRight, Left, Center, Right, Custom};<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Display Location<br/>&nbsp;&nbsp;&nbsp;&nbsp;public RadarLocations radarLocation = RadarLocations.BottomCenter;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Vector2 radarLocationCustom;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public RadarTypes radarType = RadarTypes.Round;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Color radarBackgroundA = new Color(255, 255, 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Color radarBackgroundB = new Color(0, 255, 255);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Texture2D radarTexture;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public float radarSize = 0.20f;&nbsp;&nbsp;// The amount of the screen the radar will use<br/>&nbsp;&nbsp;&nbsp;&nbsp;public float radarZoom = 0.60f;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Center Object information<br/>&nbsp;&nbsp;&nbsp;&nbsp;public bool&nbsp;&nbsp; radarCenterActive;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Color&nbsp;&nbsp;radarCenterColor = new Color(255, 255, 255);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public string radarCenterTag;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Blip information<br/>&nbsp;&nbsp;&nbsp;&nbsp;public bool&nbsp;&nbsp; radarBlip1Active;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Color&nbsp;&nbsp;radarBlip1Color = new Color(0, 0, 255);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public string radarBlip1Tag;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public bool&nbsp;&nbsp; radarBlip2Active;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Color&nbsp;&nbsp;radarBlip2Color = new Color(0, 255, 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public string radarBlip2Tag;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public bool&nbsp;&nbsp; radarBlip3Active;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Color&nbsp;&nbsp;radarBlip3Color = new Color(255, 0, 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public string radarBlip3Tag;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public bool&nbsp;&nbsp; radarBlip4Active;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public Color&nbsp;&nbsp;radarBlip4Color = new Color(255, 0, 255);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public string radarBlip4Tag;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Internal vars<br/>&nbsp;&nbsp;&nbsp;&nbsp;private GameObject _centerObject;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarWidth;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarHeight;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Vector2&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Texture2D&nbsp;&nbsp;_radarCenterTexture;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Texture2D&nbsp;&nbsp;_radarBlip1Texture;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Texture2D&nbsp;&nbsp;_radarBlip2Texture;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Texture2D&nbsp;&nbsp;_radarBlip3Texture;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private Texture2D&nbsp;&nbsp;_radarBlip4Texture;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Initialize the radar<br/>&nbsp;&nbsp;&nbsp;&nbsp;void Start ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Determine the size of the radar<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarWidth = (int)(Screen.width * radarSize);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarHeight = _radarWidth;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Get the location of the radar<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setRadarLocation();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Cr&#101;ate the blip textures<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenterTexture = new Texture2D(3, 3, TextureFormat.RGB24, false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarBlip1Texture = new Texture2D(3, 3, TextureFormat.RGB24, false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarBlip2Texture = new Texture2D(3, 3, TextureFormat.RGB24, false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarBlip3Texture = new Texture2D(3, 3, TextureFormat.RGB24, false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarBlip4Texture = new Texture2D(3, 3, TextureFormat.RGB24, false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateBlipTexture(_radarCenterTexture, radarCenterColor);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateBlipTexture(_radarBlip1Texture, radarBlip1Color);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateBlipTexture(_radarBlip2Texture, radarBlip2Color);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateBlipTexture(_radarBlip3Texture, radarBlip3Color);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateBlipTexture(_radarBlip4Texture, radarBlip4Color);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Setup the radar background texture<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (radarType != RadarTypes.Textured)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;radarTexture = new Texture2D(_radarWidth, _radarHeight, TextureFormat.RGB24, false);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateRoundTexture(radarTexture, radarBackgroundA, radarBackgroundB);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Get our center object<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GameObject[] gos;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gos = GameObject.FindGameObjectsWithTag(radarCenterTag);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_centerObject = gos[0];<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Up&#100;ate is called once per frame<br/>&nbsp;&nbsp;&nbsp;&nbsp;void OnGUI ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GameObject[] gos;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Draw th radar background<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (radarType != RadarTypes.Transparent)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rect radarRect = new Rect(_radarCenter.x - _radarWidth / 2, _radarCenter.y - _radarHeight / 2, _radarWidth, _radarHeight);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI.DrawTexture(radarRect, radarTexture);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Draw blips<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (radarBlip1Active)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Find all game objects<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gos = GameObject.FindGameObjectsWithTag(radarBlip1Tag); <br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Iterate through them and call drawBlip function<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (GameObject go in gos)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawBlip(go, _radarBlip1Texture);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (radarBlip2Active)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gos = GameObject.FindGameObjectsWithTag(radarBlip2Tag); <br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (GameObject go in gos)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawBlip(go, _radarBlip2Texture);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (radarBlip3Active)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gos = GameObject.FindGameObjectsWithTag(radarBlip3Tag); <br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (GameObject go in gos)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawBlip(go, _radarBlip3Texture);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (radarBlip4Active)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gos = GameObject.FindGameObjectsWithTag(radarBlip4Tag); <br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (GameObject go in gos)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawBlip(go, _radarBlip4Texture);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Draw center oject<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (radarCenterActive)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rect centerRect = new Rect(_radarCenter.x - 1.5f, _radarCenter.y - 1.5f, 3, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI.DrawTexture(centerRect, _radarCenterTexture);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Draw a blip for an object<br/>&nbsp;&nbsp;&nbsp;&nbsp;void drawBlip(GameObject go, Texture2D blipTexture)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (_centerObject)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector3 centerPos = _centerObject.transform.position;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector3 extPos = go.transform.position;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Get the distance to the object from the centerObject<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float dist = Vector3.Distance(centerPos, extPos);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Get the object&#39;s offset from the centerObject<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float bX = centerPos.x - extPos.x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float bY = centerPos.z - extPos.z;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Scale the objects position to fit within the radar<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bX = bX * radarZoom;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bY = bY * radarZoom;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// For a round radar, make sure we are within the circle<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dist &lt;= (_radarWidth - 2) * 0.5 / radarZoom)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rect clipRect = new Rect(_radarCenter.x - bX - 1.5f, _radarCenter.y + bY - 1.5f, 3, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI.DrawTexture(clipRect, blipTexture);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Cr&#101;ate the blip textures<br/>&nbsp;&nbsp;&nbsp;&nbsp;void Cr&#101;ateBlipTexture(Texture2D tex, Color c)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color[] cols = {c, c, c, c, c, c, c, c, c};<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex.SetPixels(cols, 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex.Apply();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Cr&#101;ate a round bullseye texture<br/>&nbsp;&nbsp;&nbsp;&nbsp;void Cr&#101;ateRoundTexture(Texture2D tex, Color a, Color b)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color c = new Color(0, 0, 0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int size = (int)((_radarWidth / 2) / 4);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Clear the texture<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int x = 0; x &lt; _radarWidth; x++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int y = 0; y &lt; _radarWidth; y++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex.SetPixel(x, y, c);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int r = 4; r &gt; 0; r--)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (r % 2 == 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c = a;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c = b;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawFilledCircle(tex, (int)(_radarWidth / 2), (int)(_radarHeight / 2), (r * size), c);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex.Apply();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// Draw a filled colored circle onto a texture<br/>&nbsp;&nbsp;&nbsp;&nbsp;void DrawFilledCircle(Texture2D tex, int cx, int cy, int r, Color c)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int x = -r; x &lt; r ; x++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int height = (int)Mathf.Sqrt(r * r - x * x);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int y = -height; y &lt; height; y++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex.SetPixel(x + cx, y + cy, c);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Figure out wh&#101;re to put the radar<br/>&nbsp;&nbsp;&nbsp;&nbsp;void setRadarLocation()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sets radarCenter based on enum sel&#101;ction<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(radarLocation == RadarLocations.TopLeft)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(_radarWidth / 2, _radarHeight / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.TopCenter)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(Screen.width / 2, _radarHeight / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.TopRight)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(Screen.width - _radarWidth / 2, _radarHeight / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.Left)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(_radarWidth / 2, Screen.height / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.Center)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(Screen.width / 2, Screen.height / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.Right)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(Screen.width - _radarWidth / 2, Screen.height / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.BottomLeft)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(_radarWidth / 2, Screen.height - _radarHeight / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.BottomCenter)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(Screen.width / 2, Screen.height - _radarHeight / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.BottomRight)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = new Vector2(Screen.width - _radarWidth / 2, Screen.height - _radarHeight / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(radarLocation == RadarLocations.Custom)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_radarCenter = radarLocationCustom;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;} <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>}</pre></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.1vr.cn/article.asp?id=526" /> 
	  <id>http://www.1vr.cn/default.asp?id=526</id>
  </entry>	
		
</feed>
