作为初学者,在写代码时碰到的一些零碎知识点,记录在此。
Resharper提示下的改进的代码。
foreach (var collectionsEnd in ingrTarget)
{
if( collectionsEnd != null)
GetCollections.Instance.AddCollection(collectionsEnd);
}
//上面等同于:
foreach (var collectionsEnd in ingrTarget.Where(collectionsEnd => collectionsEnd != null))
{
GetCollections.Instance.AddCollection(collectionsEnd);
}
if (null == instance)
{
return new GetCollections();
}
return instance;
//上面等同于:
return instance ?? new GetCollections();
再加一个冒泡排序吧,老是记不住,其实今天也没用到,想借用一下思路,但是还是没用上。
int[] arrSort = new int[] { 10, 8, 3, 5, 6, 7, 9 };
for (int i = 0; i < arrSort.Length; i++)
{
for (int j = i + 1; j < arrSort.Length; j++)
{
if (arrSort[j] < arrSort[i])
{
temp = arrSort[j];
arrSort[j] = arrSort[i];
arrSort[i] = temp;
}
}
}
关于动画事件的绑定,只支持本物体上脚本或组件中的方法,如果不是用脚本添加了不是本物体上的方法,会报没有 receive的错误。
找到一个做多语言的插件LeanLocalization,如果东西不多,用起来还是很简单的,如果项目复杂,就有点繁琐。
项目中找到的动态设置动画的代码片段
设置一个平移到指定位置的动画。平移到目标时有一个回弹的效果。
void AnimateField(Vector3 pos)
{
float yOffset = 0;
if (target == Target.INGREDIENT) yOffset = 0.3f;
Animation anim = GameField.GetComponent<Animation>();
AnimationClip clip = new AnimationClip();
//创建曲线
AnimationCurve curveX = new AnimationCurve(new Keyframe(0, pos.x + 15),
new Keyframe(0.7f, pos.x-0.2f), new Keyframe(0.8f, pos.x));
AnimationCurve curveY = new AnimationCurve(new Keyframe(0, pos.y + yOffset),
new Keyframe(1, pos.y + yOffset));
//设置曲线
clip.SetCurve("", typeof(Transform), "localPosition.x", curveX);
clip.SetCurve("", typeof(Transform), "localPosition.y", curveY);
clip.AddEvent(new AnimationEvent() { time = 1, functionName = "EndAnimGamField" });
anim.AddClip(clip, "appear");
anim.Play("appear");
GameField.transform.position = new Vector2(pos.x + 15, pos.y + yOffset);
}
关于Unity 图集的问题。
最近导入项目中需要替换美术资源,通常都是直接把整个Texture文件夹替换掉,这时会出现图片没换掉的问题。gameobject 上的图片确实是指向新换的图,但是运行是却还是旧图。
原因是unity运行时调用的是图集中的文件,而不是资源面板里的文件。在unity5中是自动生成图集的,图集文件存在Library\AtlasCache路径中的。有时候直接替换之后Unity没有重新做图集,没有把旧图替换掉,所以我目前的解决方法是关掉Unity,删掉AtlasCache中哦的文件,然后再打开Unity重新自动生成一遍图集,这时图片就会替换了。
关于Animation改变图片颜色和透明度
在5.2中老版的Animation不能改变UI上图片的颜色和透明度,只能用Animator来做。
取得本地语言。
Unity提供了一个函数Application.systemLanguage,但是之前在编辑器中测的时候可以获得系统的中文是Chinese,但是到android手机上就不管用了。后来打印了一下手机上获得的语言,原来是ChineseSimplified,改了对于的多语言代码之后就OK了。
Android环境
之前打包总是出问题。涂总过来给重新装了一下android环境,不是做原生开发就不用装Android Studio,装个Android Manager就可以了。其实现在Unity做的很智能了,直接会给一个Download按钮,转到官网下载页面,
SDK:https://developer.android.com/sdk/index.html#Other
JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html
直接下载就可以了。
另外还碰到接facebook的SDK的问题。具体接的方法facebook网站上有。
处理这些问题之后感觉,还是要仔细看错误提示,一般问题都能解决。