Unity 资源束(Asset Bundle)可视化编辑构建工具

Unity中的内容动态更新一般都使用AssetBundle来实现,相对于Unity4.x的AssetBundle(简称AB)时代,Unity5.x对AB的做了很大改进,创建AB方便了很多,不过里面的文件结构或者冗余还是不太容易.

.

所以Unity官方又开发了一个小工具”Unity Asset Bundle Browser tool”,旨在改变现在AB的工作流,这个工具是编辑器扩展脚本的形式存在的

可以从Github上获取最新的代码:

https://github.com/Unity-Technologies/AssetBundles-Browser

将代码放置于项目的Editor目录下即可使用.注:当前仅支持Unity5.6及更新的版本上使用.

到菜单”Window->AssetBundle Browser”中执行这个工具.

AB中的资源关联,资源尺寸,资源内容,资源共用等信息一目了然.删除添加编辑都可以操作了,很简单易用.

Github页面中也有简要使用说明.

Unity与苹果macOS 10.13 (High Sierra)的问题

现阶段是不建议升级更新到 macOS 10.13 High Sierra的.
但是如果像我一样不清楚带来的问题升级到了10.13,那么需要对应的升级Unity编辑器来修正这个问题,具体现象是编辑器打开任何项目,在Project视图都是空的,什么都没有,Unity编辑器无法读取项目资源文件.
原由苹果对机器的固态硬盘做了分区格式做了改变,之前是HFS文件系统,现在改为了APFS,即Apple File System.导致老版本软件不兼容了,比如旧版本的迅雷(不评价它善恶).
升级后,要解决Unity使用问题,有两种办法:
方案一:更新Unity编辑器,当前Unity有下面一些版本可以正常使用:
– 5.5.4 patch 5 及更新版本
– 5.6.3 patch 4 及更新版本
– 2017.1.1 patch 3 及更新版本
– 2017.2.0 RC 1 及更新版本

可以从https://unity3d.com/unity/qa/patch-releases下载需要的版本,虽然是patch版,但其实和全新安装没什么区别,并不是很小体积的补丁包

更低的版本,如5.4.x就没有补丁版了,可以用第二种办法解决.

方案二:使用移动硬盘或者新建一块分区来放置项目,用Unity打开这个分区上的项目来使用,只要不是APFS类型的分区,都可以正常使用.

相关链接:https://forum.unity.com/threads/unity-and-macos-10-13-high-sierra.474527/

将Macbook的音频用同轴输出到七彩虹C4相关

七彩虹C4这款播放器买了几年了,utf8歌名乱码及不能遍历文件夹播歌等问题影响了些许在使用上的便捷度.但它”老气”低调的外型并不影响它的Biger.

买了一条USB转同轴的线,准备让电脑的音频通过USB到同轴再到C4中,让C4做外置声卡的作用解析播放,使用过程中遇到些小问题,写在这里,也许有人也会遇到呢.

连接方式很简单,USB端插在电脑USB接口上,另外一端同轴插到C4的同轴输入孔即可,买同轴线要注意,因为C4的插座设计有些问题,要买明确支持C4同轴插座的线才好,如下图箭头指示:

在C4的菜单中找到音频输入设置,选择”SPDIF IN”,如图:

在电脑的音频输出中选择USB输出,如下图:

这时候电脑的音效应该就会经由C4并且在C4的耳机中体现了.而电脑音量调节就没有作用了,调节音量需要去C4上调整.

比如我用VOX播放器,没有声音,那么需要调整VOX播放器的音频输出选项,方便的可以选择”Same as System”,这样系统设置选择的哪个输出,播放器也就以哪个输出为准了.

Safari网页上看Flash视频如果没有声音,那么需要在Flash上右键选择设置,同样的选择对应的音频输出后即可,Flash这点比较二,没有VOX那样与系统同步选项.

如果Safari上无论怎么设置都没有音频输出,那么要看一下是否打开了关闭插件节省电量选项,可以尝试关闭它,如图:

总体来说音质有所增强,当然,这个是比较玄学的事情啦.目前耳机用的森海塞尔的大馒头通过转接头插到的C4的6.5mm耳机孔.

Unity中飘逸的头发或飘带实现

在Unity开发中,有些角色我们要赋予TA更多的细节让衬托真实度,比如女孩的长发飘飘,或者丝带,旗帜,虽然我们可以用动画clip来呈现,也可以用Spring Joint和Configurable Joint来设置创建丝带,绳子之类,但是设置起来我觉得挺麻烦的.

找来找去,在一位日本的Unity开发者博客上找到了一组脚本,实现飘逸的长发或飘带还是挺好用的.

这是Webplayer案例:http://rocketjump.skr.jp/unity-spring-test/

这是测试案例,用了Unity二次元角色:
http://rocketjump.skr.jp/download/SpringTestScene.zip

这是只含必须的脚本包:http://rocketjump.skr.jp/download/SpringScript.zip.

具体用法可参考测试案例中,下面只简要说明可能会遇到的问题,首先要在飘起来的模型中让美术构建骨骼及蒙皮,如要动起来的这部分含有动画,那么可以在fbx导入设置中将这部分动画取消动画的导入,因为我们用脚本来处理,不使用动画.

在要参与飘动的每根骨头中创建一个空的子对象(empty gameobject),并将子对象移动到当前所属骨头的末端,之后再给参与运动的每根骨头挂上Spring Bone脚本,里面的Child指定刚才我们创建的子对象,Bone Axis来描述末端相对与骨骼坐标点的方向,如empty gameobject在骨骼坐标y轴负方向上,那么BoneAxis添”0,-1,0″,Radius只半径,这里用来生成碰撞体,仅支持球形碰撞体,Stiffness Force是硬度,数值大像钢筋,数字小像丝带,DragForce是力衰减,数值大,整个模型动起来约像丝带,数值小整个模型动起来像多节棍.具体可调整各值观察结果.
之后在我们这个模型的父级添加SpringManager脚本,并把所有添加了Spring Bone脚本对象都拖拽到SpringManager数组字段中.播放拖动模型起始骨骼就可以看到效果了.
如我们制作角色头发飘动效果,那么我们还希望头发与角色身体发生碰撞,避免头发穿透角色身体,这就要创建Gameobject并赋予SpringCollider脚本,可以看到绿色球形Gizmo,通过调整它的直径来改变碰撞球的范围,将它放置在想要阻挡头发穿透的地方,并将Spring Bone中指定需要产生碰撞的SpringCollider对象(勾选debug后播放可以看到黄色球型Gizmo).

大概就是这样了,还是要实践出真知.

参考文献:http://rocketjump.skr.jp/unity3d/109/

转载请注明来自1vr.cn By XK

使用AndroidStudio为Unity5.*搭建安卓开发环境

使用Time capsule恢复了系统备份后,发现还是存在一些问题的,比如QQ聊天记录文件错乱,然后又发现了Finder侧边栏有异常,收藏栏会莫名其妙的消失,去Finder偏好设置里勾选项目,仍旧会出现这个问题,似乎配置文件变成了只读.最烦恼的Safari上传文件时打开文件选择窗口时侧边也是没有收藏栏的,瞒麻烦的.
后尝试删除相关配置文件重启后解决了问题,方法如下:
进入~/Library/Preferences目录,找到

com.apple.finder.plist
com.apple.sidebarlists.plist

这两个文件删除并重启系统即可修正这个问题,真是奇怪.
突然又想找Mac上类似之前在Windows上用的很爽的TC(total commander)软件,终于找到一个靠谱的,叫”Commander One”,推荐Mac用户试试这分栏式文件管理器,当然要自定义快捷键才用起来舒服,默认的键设几乎没法用.

之前Unity开发Android的环境都是手工搭建的,装eclipse又装sdk的,发布apk也没有问题就一直没更新环境,前几天才看到早就有androidstudio这么一套工具,闲着没事更新一下吧,当时用的Unity版本为5.5.0,结果怎么都提示找不到sdk:

折腾了许久才找到原因,是因为sdk tools的版本过新,而Unity5.5.0中是不支持v26.0.2版的,只能把sdk tools换成v25版本才可以,我最后用的是25.2.5这个版本.可以从网上单独下载这个版本,然后替换android sdk目录下的tool目录文件.

最后别忘记检查Unity的偏好设置中sdk路径指定是否正确,要指定到sdk的根目录,而不是sdk下面的子目录,也就是说不是tool等目录.

再Build就不会有问题了.

最近在看机械键盘,之前一直觉得机械键盘只为自己爽不顾他人感受,可竟然有点想反正大家都吵了,一起吧,看谁狠的意思.吐槽下新款苹果本子键盘和苹果二代蓝牙键盘,键程短的可以,为了追求薄而忽略了很多本应保留的东西,合适吗?!还好这两个设备目前我都没有买.

Mac中的bogon名字修改

前些天本子送到苹果天才吧修理,不知道被弄了什么法术,导致系统崩溃,回来后用时间胶囊恢复的系统数据,用着用着发现终端里的计算机名是bogon了,这是什么鬼?

于是网上搜了搜,大概是终端会向DNS服务器查询本地IP的什么解析,如果没查到就会显示计算机名,而DNS错误将保留地址反向的NS查询结果返回了bogon,而bogon本该用来标定虚假的IP地址,而非保留IP地址.所以计算机名就成了bogon了.

如果计算机名是bogon,那么只要在系统偏好设置里面打开找到”共享”,在此窗口的上方可以修改”电脑名称”.

如果是终端里显示bogon,像下面这样:

bogon:~ username$

可以直接用下面这个命令修改,将newhostname替换成想改的名字即可:

scutil --set HostName newhostname

执行后建议重启系统后再使用.

个人所得税网上查询方法(不必去税局现场核准)

在北京生活,社保和个税缴纳成了一个非常重要的指标,有了它们就意味着你不算一个合格的无业游民,前几天出了篇文章叫”北京,有2000万人假装在生活”,引起朋友圈疯狂转发,我看了一下,挺扯的一篇文,没有主题,两面倒,就因为站在谁的角度都能找到平衡点,所以它成了爆文,无论别人怎么生活,我一直都是用一句似乎文不对题的话来阐述生活就是”自己的事情自己做”.

在地税网站上可以查询个税缴纳情况,但是查询前需要拿着身份证跑到地税所去”核准”,这么做为了什么我不清楚,只知道要工作日去就不是很方便的一件事,核准后我自己的查询没什么问题,而我爱人的登录就提示未核准,为这事儿我再次跑了税所去核准,税所说已核准了,在税所大厅的电脑尝试查询,仍旧提示未核准,问工作人员,答复说从哪哪哪点哪个哪个隐藏链接进到哪哪页面用那个就可以…她说的是旧版查询页面,这个我之前就知道,但是旧版页面可以正常查询,到新版就提示未核准,这不是很奇怪的问题么,工作人员答曰别管那么多,他们也不知道原因,用旧版就行了不就行了么.恩,他们说的对! 🙂

前阵子查询发现旧版彻底无法访问了,只留下新版,并且只有登录表单,没有注册,修改密码,重置密码表单,这网站做的可真忧伤了,在税局网站留言咨询所遇到的问题,他们回复了一个网站技术支持电话,我打了电话,那边说我密码不对,大小写不对,密码有没有o,0啊.不对的话再去税所核准取密码,六位的密码才对.卧槽,我忍不住爆粗口,回来我就翻网页源码,看能不能找到旧版入口或者修改密码的入口,果不其然,让我搞定了.所以写下来,方便他人.

个税相关的要到地税局网站查询办理,网址是:http://www.tax861.gov.cn
去税所进行身份核准后,正常情况下点击”办税服务”->”个人所得税纳税申报及查询服务”登录即可查询个税缴纳情况了(连个登录后退出按钮都没有,什么破网站,重登陆链接我已经找出来了,下文有),而我们说说非正常情况怎么办.

这方法新用户不用亲自跑税局核准哦,查询页面中有个”个税自行申报客户端下载”,我们需要下载它进行注册及身份核准,只支持windows,如果你是电脑小白,按提示下载安装即可,如果懂一些电脑,那么推荐手动安装,直接下载完整安装包”http://pan.baidu.com/s/1eRGlmpk”,它是自释放压缩包,不要双击,用winrar将它解压后运行里面执行文件也可打开软件,这样做的好处是核准完直接删除解压目录就可以了.

打开软件后根据提示注册用户,这样你就有登录密码了,但是去前面的个税查询页面登录仍旧提示让你去税局上门核准身份的,那么我们接着看软件里,有个身份认证,这个其实就是身份核准,有三种核准方法,根据你自身选择方便的核准方法进行认证.认证后就可以去查个税情况啦.不用跑税局的感觉真好,是吧?

重登陆链接:https://gt3app9.tax861.gov.cn/Gt3GsWeb/gsmxwyNo/YhdlAction.action?code=login

注:该方法适用于在北京缴纳个人所得税查询,其它地区不确定是否适用.

本文原创,转载请注明转自http://1vr.cn,By XK.

AR中的阴影镂空,蒙板处物体遮掩,蒙板处物体显示等

我们在做AR(增强现实)的时候,有几种效果需求会遇到.

1:阴影镂空
通过成功识别Marker(花朵背景),在Marker位置生成立方体模型,为了效果逼真,我们需要立方体模型产生个阴影投影,默认情况下我们只能用其它模型来接受立方体的阴影投射,Marker模型在Play时是不能用于接受立方体阴影的,我们把接受阴影的Plane模型进行处理,让它仅保留投射的阴影部分,其余部分镂空,这样再与相机画面叠加就会产生一个较逼真的阴影效果了.

把下面的shader赋予给接受阴影的模型即可完成阴影透明镂空效果,图中黑色阴影其实是原本的Plane,与Maker无关.

Shader "FX/Matte Shadow" {
 
Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
 
SubShader {
 
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 200
    Blend Zero SrcColor
 
CGPROGRAM
 
#pragma surface surf ShadowOnly alphatest:_Cutoff
fixed4 _Color;
struct Input {
    float2 uv_MainTex;
};
inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
    fixed4 c;
    c.rgb = s.Albedo*atten;
    c.a = s.Alpha;
    return c;
}
 
void surf (Input IN, inout SurfaceOutput o) 
{
    fixed4 c = _Color; 
    o.Albedo = c.rgb;
    o.Alpha = 1;
}
 
ENDCG
}
 
Fallback "Transparent/Cutout/VertexLit"
 
}

2:蒙板处物体遮掩

黄色模型为蒙板,其它模型凡是被蒙挡的地方都不渲染,就像布尔减去黄色模型一样,这个效果可以用来做什么呢?比如说做了人脸识别,要给相机图像中的角色戴副眼镜,如果没有用蒙板遮挡,那么无论相机画面里是侧脸还是正脸都将看到完整的眼镜,这与现实不符,现实中侧脸的时候我们只能看到视距较近的眼镜腿,另一侧眼镜腿应该被脸部遮挡,而我们取的相机画面,它是2D平面的图像,不能自动帮我们进行正确的显隐,所以我们要做一个适当的头部模型作为裁切蒙板即替代黄色模型来把不应显示的部分遮掩掉.

只需将下面的shader作为材质球赋予给希望作为蒙板的模型即可.

Shader "DepthMask" {
   
    SubShader {
        // Render the mask after regular geometry, but before masked geometry and
        // transparent things.
       
        Tags {"Queue" = "Geometry-10" }
       
        // Turn off lighting, because it's expensive and the thing is supposed to be
        // invisible anyway.
       
        Lighting Off

        // Draw into the depth buffer in the usual way.  This is probably the default,
        // but it doesn't hurt to be explicit.

        ZTest LEqual
        ZWrite On

        // Don't draw anything into the RGBA channels. This is an undocumented
        // argument to ColorMask which lets us avoid writing to anything except
        // the depth buffer.

        ColorMask 0

        // Do nothing specific in the pass:

        Pass {}
    }
}

3:蒙板处物体显示

这个蒙板默认情况下会将它所覆盖的所有对象都裁切掉,可谓杀的毫无痕迹,如果我们用Unity内置的相机纹理贴到模型上作为图像背景的时候,它同样也会被蒙板扼杀掉,而我们不喜欢它被挖空,所以要针对它进行处理,让这部分不受蒙板影响.

把下面的脚本挂接到任何不想被蒙板影响的对象上,如我们挂到蓝色模型上,脚本有个暴露的变量,我们将RenderQueue设置比蒙板shader的RenderQueue数值小的值,在Play时,蓝色模型就可以无视蒙板.

using UnityEngine;

[AddComponentMenu("Rendering/SetRenderQueue")]

public class SetRenderQueue : MonoBehaviour {

	[SerializeField]
	protected int[] m_queues = new int[]{3000};

	protected void Awake() {
		Material[] materials=this.GetComponent().materials;
		for (int i = 0; i < materials.Length && i < m_queues.Length; ++i) {
			materials[i].renderQueue = m_queues[i];
		}
	}
}

资料参考:
http://mec0825.net/blog/?p=126
http://wiki.unity3d.com/index.php?title=DepthMask