Unity 和 iOS SDK 4.3发布到AppStore的问题

很多人依旧苦恼提交因为SDK4.3编译的Unity iOS应用程序被商店驳回的事情.当时,这个问题显得很复杂,因为所有的问题都是在苹果那边的反馈,而开发者自己却看不到应用崩溃的重现.之后Unity公司给所有开发者发了封邮件,让使用Xcode3.2.5和iOS SDK 4.2来保证顺利通过AppStore的审核.并且提供了原始SDK下载链接.并且保证用上面版本SDK编译出来的应用程序可以很好的运行于当时所有iOS版本和设备上.

从那个时候起,Unity公司就花了很多时间在论坛上分析出现问题的报告,也尝试了一些想法.后来终于找到了问题所在,就是iOS SDK4.3中一个微小的有关AppStore代码保护系统的问题.

最近,官网论坛的一些用户反馈说有SDK4.3成功提交到AppStore的成功案例了.这使得解决方案出炉(同样感谢”susantio”和”ratrodstudio”).项目使用了特殊链接器的标志”all_load”,使用这个标志后,SDK4.3就可以正确的计算受保护的代码的大小,从而解决了头疼的拒绝上架的问题.

Unity 3.4发布指日可待,会默认修正这个标志问题,但是如果你现在基于使用新的SDK,那么可以手动添加这个标志.

使用Xcode3.2.6(SDK 4.3)添加标志的方法:

1:在Xcode打开你的项目.
2:在Xcode的菜单中选择”Project->Edit Active Target”.
3:在配置的下拉菜单中选择”Release”.
4:然后搜索”linker”.
5:找到一个名为”Other Linker Flags”,并双击它.

6:点选加号,添加”-all_load”.

7:选择清除原有的Build,就是菜单中找”Clean all targets”.

使用Xcode4/4.0.2(SDK 4.3)添加标志的方法:

1:在Xcode打开你的项目.
2:打开Project Navigator.
3:接下来选择”Unity-iPhone”里面的TARGETS.
4:接着选择”Build Settings”.
5:同样的搜索”linker”.
6:找到”Other Linker Flags”项,双击它附近的”Release”设置.

7:点选加号,添加”-all_load”.

8:选择清除原有的Build,就是菜单中找”Clean all targets”.
9:如果要发布的话就点击”Product” -> “Build For” -> “Build For Archiving”,不要使用Product -> Build,因为它是编译为”debug”的应用程序,默认不会包含”-all_load”标志).

原文:http://blogs.unity3d.com/2011/06/15/unity-and-ios-sdk-4-3/
转载请注明来自1Vr.Cn,否则MJJ!  

Unity的遮罩技术简述

遮罩技术是一个基本的技术方法,有很多很多中用法.你可以在Flash中经常看到遮罩的使用,它可以另一些视觉元素更加惊艳.当我看到Unity中没有包含任何几何体和图片的遮罩技术很不爽,不过,幸运的我找到了解决方案,就是”Depth Mask”着色器.

先看看着色器的代码,没错,非常短.

Shader “Depth Mask” {
    SubShader{
        ColorMask 0
        Pass {}
    }
}

如果用了多维材质,你需要像下面这样写:

Shader “Depth Mask Complex”
{
    SubShader
    {
        Tags {“Queue” = “Background”}
        Blend SrcAlpha OneMinusSrcAlpha
        Lighting Off
        ZWrite On
        ZTest Always
        Pass
        {
            Color(0,0,0,0)
        }
    }
}

如果你想更改任何一个物体材质的特性座遮罩(纹理,颜色等等)将是失败的,除非你用SetPass()去设置着色器,关于这个方法的文档在这(http://unity3d.com/support/documentation/ScriptReference/Material.SetPass.html).

示例项目下载:http://pixelplacement.com/wp-content/uploads/2011/02/Masking.zip

原文:http://pixelplacement.com/2011/02/15/masking-in-unity/
转载请注明来自1Vr.Cn

Unity中快速给Object在屏幕上定位

让你的UI元素很轻松的固定在用户屏幕的九个位置:左上,中上,右上等等,同时能自匹配屏幕尺寸,方便多个设备间的移植.这个超级简单的C#扩展脚本,提供了一个叫”ScreenPlacement”的方法.

将脚本添加倒项目中后,利用ScreenPlacement就可以很容易的来把你的内容放置到屏幕的九个位置之一.

//放置一个Object在屏幕的右下角:
transform.ScreenPlacement(ScreenPosition.LowerRight);

//放置一个Object到屏幕的右下角,且距离屏幕右侧60像素,距离底部20像素:
transform.ScreenPlacement(ScreenPosition.LowerRight, new Vector2(60,20));

如果你要切换一个相机来协助显示一些内容的话,你需要将ScreenPosition传递给你的那个相机,以确保可以准确计算该相机中的内容显示.

//放置一个Object在屏幕的右下角,以MyInterfaceCamera为显示参考:
transform.ScreenPlacement(ScreenPosition.LowerRight, MyInterfaceCamera);

//放置一个Object到屏幕的右下角,且距离屏幕右侧60像素,距离底部20像素,以MyInterfaceCamera为显示参考:
transform.ScreenPlacement(ScreenPosition.LowerRight, new Vector2(60,20), MyInterfaceCamera);

点击下载脚本包

原文:http://pixelplacement.com/2011/05/13/simplifying-screen-positioning-in-unity/
转载请注明来自1Vr.Cn

提高Unity中管理多个相机的效率

在Unity里管理多个相机(Camera)是一个挺痛苦的事情,”Camera Preview”也不是很实用,窗口太小,比例也不能调整.在众多的相机中禁用,启用来查看相机位置设置视角,非常烦琐.

Security Camera的目的就是让这个过程简化.只要将脚本放进项目目录,并且拖拽到场景中每个相机上,包括MainCamera.现在你就可以快速的切换查看各个相机的实际效果,在Unity的层次视图(Hierarchy)点击你要设置的相机,就可以在游戏视图中看到这个相机的效果了,不必再一个个的去关闭其他相机了.

告别这可怜的相机预览吧.

要注意的是要使用Security Camera脚本,你应该给每个相机一个唯一的名称以及确保有个主相机且标签tag为”MainCamera”,如果你忘记这样做.系统会提醒你.另外脚本还提供了一个静态方法,叫”ChangeCamera”,该方法只需要一个字符串,就可以用脚本快速切换相机了.像下面这样:

using UnityEngine;
using System.Collections;

public class CameraSwap : MonoBehaviour
{
    void Update ()
    {
        //pressing 0, 1, 2, and 3 will swap before the cameras named "Main Camera",
        //"Camera 1", "Camera 2", and "Camera 3" which have Security Camera added:
        if (Input.GetKeyDown(KeyCode.Alpha0)) {
            SecurityCamera.ChangeCamera("Main Camera");
        }
        if (Input.GetKeyDown(KeyCode.Alpha1)) {
            SecurityCamera.ChangeCamera("Camera 1");
        }
        if (Input.GetKeyDown(KeyCode.Alpha2)) {
            SecurityCamera.ChangeCamera("Camera 2");
        }
        if (Input.GetKeyDown(KeyCode.Alpha3)) {
            SecurityCamera.ChangeCamera("Camera 3");
        }
    }
}

脚本是通过设置相机的深度来实现相机切换的,Depth值会是999999和-999999.

点击下载脚本包

原文:http://pixelplacement.com/2011/02/14/security-camera/
转载请注明来自1Vr.Cn

修改iTween的默认值

能不能修改iTween的默认值呢,如何改呢?答案是肯定的,而且非常容易.iTween可以在任何时间修改默认的一些数值来达到批量修改的目的.比如下面这些:

time = 1
delay = 0
loopType = LoopType.none
easeType = iTween.EaseType.easeOutExpo
lookSpeed = 3
isLocal = false
space = Space.Self
orientToPath = false
lookAhead = .05
useRealTime = false

比如你需要更改默认的动画类型为linear,只需要这样修改即可:

iTween.Defaults.easeType = iTween.EaseType.linear;

如果你需要所有动画都执行7秒,不必每个都次代码,只要更改默认值即可,如下:

iTween.Defaults.time = 7;
iTween.MoveTo(gameObject, iTween.Hash("x",5)); //这个动画将运行7秒
iTween.RotateBy(gameObject, iTween.Hash("y",2)); //这个动画同样也会运行7秒.

使用和修改iTween的默认设置可以让你的哈希表参数更短,同时也可以批量调整动画设置.

iTween可视化路径编辑器

我想iTween最爽的功能就是让物体沿着一个路径平滑的运动.但是,代码写这些路径可挺麻烦的,通常要坐很多个空物体等来辅助做路径点.为了使这个事情更简洁,加强iTween易用性,我创建了一个名为iTweenPath的可视化插件来辅助iTween的动作路径创建及可视化编辑.

我用一个滑块调节作为调节路径节点的控制,默认是10个,如果你想要更多的,你可以编辑一下脚本,改成你需要的,打开iTweenPathEditor.cs修改第48行里的数值即可.

_target.nodeCount = Mathf.Clamp(EditorGUILayout.IntSlider(_target.nodeCount, 0, 10), 2,100);

如果你需要最多30个节点.你就改成

_target.nodeCount = Mathf.Clamp(EditorGUILayout.IntSlider(_target.nodeCount, 0, 30), 2,100);

具体用法,看视频教程吧!

http://player.youku.com/player.php/sid/XMjY5OTYxODQw/v.swf

原文:http://pixelplacement.com/2010/12/03/visual-editor-for-itween-motion-paths/
转载请注明来自1Vr.Cn

Unity动画库插件iTween介绍

iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出.让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等.

iTween的核心是数值的插值.只需要定义开始和结束,中间过程iTween就会帮你弄好,简单易用,作用毫不马虎.

“但是我用xxx可以做这个的”

每件事情都会有多个方法来实现,Unity里也是,你可以用建模软件做动画,也可以在Unity内部的动画时间线来做,也可以用Js,C#等来做,可是谁不想更快更容易的完成需要的动画效果呢?iTween就是给你的答案.制造简单不代表产出的东西简单,并且iTween经受了个大游戏工作室的测试考验,高效,快捷,简单,稳定,不试它会后悔的.呵呵.

“好吧,我决定试试,我怎么开始呢?”
先从http://itween.pixelplacement.com/下载iTween插件,它由一个c#文件组成,支持Unity所有版本以及不管你用什么编程语言都可以使用它,如果你是用Js,你要将它放在Editor文件夹里,如果是c#,放在项目的Assets里的任意目录即可.好了,你装好它了.

“Hello World!”
下面了解一下iTween的基础知识,iTween的所有方法都有2种方式,一种简单的(simple),一种定制的复杂(customizable)的.在复杂定制方式里可以设置iTween所有属性方法.iTween里的方法几乎都需要赋予一个GameObject,为了获取更大的性能,只有一些特定的函数可以在Update方法中重复调用,

iTween可以做很多事情,我们先从简单的学起,先控制一个物体从一个位置移动到另一个地方,这里用到MoveTo()方法.让它两秒后移动到(2,0,0)位置上:

iTween.MoveTo(gameObject, Vector3(2,0,0), 3);

上面是不是很简单?我们如果需要对这个动画进行更多的控制,我们需要用”customizable”模式,像下面这样写:

iTween.MoveTo(gameObject, {“x”:2, “time”:3, “loopType”:”pingPong”, “delay”:1));

上面的意思就是三秒的时间将物体运动到x坐标为2的位置,运动的类型为”pingPong”,延时1秒执行这个运动.

如果想完全了解iTween所有方法,请查看完整的描述文档:http://itween.pixelplacement.com/documentation.php

“令人厌恶的哈希表”

有很多参数更你设置,在C#中.你可能要这样写才可以:


Hashtable parameters = new Hashtable();
parameters.Add("x",2);
parameters.Add("time",3);
parameters.Add("looptype",iTween.LoopType.pingPong);
parameters.Add("delay",1);
iTween.MoveTo(gameObject, parameters);

在Js中只要一行代码到C#中变成了六行,有点违背了最小投入最大产出的中心思想,但是,不要怕,iTween有一个解决方案,让C#中也可以像JavaScript那样简介,iTween里的hash()方法就可以做到,看下面修改后的代码:

iTween.MoveTo(gameObject, iTween.Hash(“x”,2,“time”,3,“loopType”,”pingPong”,“delay”,1));

这样好多了吧.

“所有的东西都免费!”

iTween会定期更新,其中包括修复错误以及更新例子,完善文档等支持.作者做iTween不知疲倦的工作了约五个月,还要照顾他怀孕的妻子,工作,家庭装修,几乎都不睡觉了.他的目标就是帮助更多的人学习C#.带动所有人互帮互助.

希望iTween会帮助到更多的人.

原文:http://pixelplacement.com/2010/11/14/itween-for-unity/
转载请注明来自1Vr.Cn

在Unity中内建脚本参考搜索

如果你和我一样.同时玩弄10多个项目,打开很多工具软件,难免手忙脚乱,脑袋也不会完全记住所有API命令,每次都去Help > Scripting Reference,然后再点击Search找需要的东西,太恼人了.

如果是这样.来用用这个文档搜索工具吧,它将提升你的工作效率.呵呵.

只需要将资源包导入你的项目里,你会发现Unity菜单栏出现一项”Pixelplacement”菜单,里面有个”Doc Search”,将这个窗口拽到你喜欢的位置.所有搜索将在这里进行,也会记忆你搜索的历史,你可以选择搜索本地的文档,你也可以用默认在Unity站点上搜索.

点击下载脚本包