Unity3d操作的一些技巧知识点和BUG解决方案
综合文库 903 1
实名

通过了实名认证的内容创造者

发布于 2017-1-5 12:51:59

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 胖纸_DHW 于 2021-1-4 11:34 编辑

1.如何同时打开两个UNITY3D项目。

有时候需要对比,或者需要添加另一个项目的某资源到目前项目,同时打开两个项目看起来会比较明了。如果直接打开的话,发现它说有重复项目已经被打开而提示错误不能打开。


此刻就需要设置一些unity preferences了,从edit处打开。勾上下图红圈圈就可以了,always show project wizard(打开项目前永远显示项目向导)。选完这个之后每次打开就会让你选择项目路径了。

5b6cb950gc6a67eb68fdf&690.jpg


如果需要同一个项目打开在两个UNITY3D的话,那么需要下载不同版本的UNITY3D。



2.collider的碰撞检测,即便是在collider里面也一样触发。

5b6cb950gc6a76305835a&690.jpg

上图是测试,原本所有面包都在蓝色方块上,有事件当面包触发到COLLIDER的时候会自动飞出。我动态生成了一个COLLIDER来包着面包,所有面包飞出。


3.

transform.rotation获取出来的是四元素的值。

假设需要获取在transform面板上的旋转值,需要获取其欧拉角transform.eulerAngles。


4.判断三维向量是否为空

方法1:TestVector3.magnitude == 0

方法2:TestVector3 == Vector3.zero


5.计算反射向量,vector3有自带方法。

Debug.Log(Vector3.Reflect(new Vector3(1.0f,0.0f,1.0f),new Vector3(0.0f,0.0f,1.0f)));


6.

C# 不支持动态数组,用 ArrayList 可以实现动态数组的功能。


7.

UNITY引擎中,外部类不能直接调用Editor里面的类,但是Editor里面的可以直接调用外部类。


8.

collider.transform,gameobject.transform,componnet.transform都是它们绑定之上的gameobject的transform 。


9.

Vector3.one其实就是标准向量(1.0f,1.0f,1.0f)


10.

有时候发现子物体乱飞,不受坐标控制。那么很有可能是因为其父节点的相对坐标问题。


11.

application.datapath在编译后的模式也是可以用。


12.构造以某向量为轴的旋转某角度的旋转向量。UNITY自带有四元素旋转矩阵方法。

// Sets the transforms rotation to rotate 30 degrees around the y-axis

vecRotation = Quaternion.AngleAxis(30, Vector3.up);


//use it

vecAim = vecOrgin * vecRotation;


13.关于3DMAX的单个模型小块全部在UNITY3D里面都被转-90度的问题

因为3DMAX傻逼用右手坐标系……

.FBX都会这样,导出.3DS就没什么问题。

主要是怕程序出错,很容易出错。




17.关于UNITY3D自带的ASSET SERVER

这玩意虽然简单易用,一旦操作失当(很容易失当)。当场景资源多的时候,有时候会直接替换资源。UNITY3D是会将这两个玩意辨认为不同的同名文件。会改掉本地或服务器相应目录的名字。多几次之后你就会傻眼了。

所以如果可以还是用SVN或者其他专业点的版本管理器好。


18.关于DontDestroyOnload

DontDestroyOnload的物体要保证它不被加载第二次,不然再进入这个场景就会再多一个。

所以最好能动态生成,在生成之前检验一下它是否存在。若不存在,再添加这个物体。



19.关于粒子的淡入和淡出

如下面两个图,在粒子系统的面板中,有COLOR OVER LEFTTME,里面可以拉多个透明度的点。






20.项目备份要及时

UNITY3D有时会犯一些你压根不知道怎么出来的编译BUG,重新拉个项目就会正常。


21.不同机器上,游戏的操作感觉不一样。

一般不同机器它的帧数是不一样的,假设UPDATE里面加了移动但没有加入时间参数,则会造成帧数不一样它的运动情况则不一样。若有的加了,有的没加,那么呵呵,效果更加糟糕。所以相关计算要加入时间参数。



25.Tiling和Offset

每张材质图片都具有的属性。

Tiling 指的是取当前图片的大小(vector2 0~1 比例的值)

Offset 指的是当前图片UV的值(vector2 0~1 比例的值)

相对应的代码为

renderer.material.mainTextureScale = new Vector2(x,y);

renderer.material.mainTextureOffset = new Vector2(x,y);



26.读取TXT问题

可能很多人没有了解过,其实U3D是可以直接读取TXT的。

查询一下TextAsset就知道了。


27.播放动画的帧实现方式

AnimationState.time是动画的播放时间,可以控制这个时间来实现类似帧的播放方式。


28.U3D的例子系统的RENDERER部分有BILLBOARD,有很多种朝向可以选择。

例如要做个一直面向天空或地面的粒子,摄像机只需要往上看和往下看的效果的话,是很好用的。


29.

不要忘了LateUpdate()这个函数,这个函数在Update后调用,一般来说像跟踪摄像机的位置变化要写在所有变换之后。用于很好的安排顺序。


30.

如果你的项目包涵单机和网络两个部分。

请务必将单机和网络部分分开脚本。不要在脚本里不断做不需要的重复的判断。而且各种联动烦死你。由于开发会进行不断地修改,最好先将单机部分逻辑实现。然后拷贝一份来实现网络部分。假设之后要修改的时候,每次单机和网络都要同步修改。


31.

ScreenToWorldPoint的参数vector3(屏幕坐标X,屏幕坐标Y,距离摄像机的世界距离)


32.

(NGUI)如果特效人员要在UI上做粒子特效,最好是在已有UI上做,不然搬运是个麻烦的过程。


33.

当您的动画播放出现褶皱、破损、奇葩的时候,估计是点受骨骼影响太多了,U3D设置中一个点最多只能受4个骨骼影响。


34.

角色模型经常换的情况,需要整理一套很好的方案来适应。不能每次都改绑点和引用,太浪费时间。程序就该做程序做的事情,不要把时间浪费在拖拉资源拖拉引用上。


35.

模型莫名期末有很多particleview*物体。(转)

在3DMAX中当你按下6时候,会弹出particle view窗口。同时会生成一个多余的particle view物体(这个物体在大纲中是找不到的,但当使用Ctrl+A的时候,他就会被选到,而且这个物体会占用一定的文件空间),在导出时particle view会严重扰乱物体的轴心。

决方法很简单,只要在max导出之前,按下f11键,进入max的脚本编辑器,输入delete $'particle view*',回车,此时下一行会提示有几个particle view被删除了。看到这个数字即可以放心导出了。



36.

尽量用四元数旋转,因为欧拉角会有死锁现象。





37.

因为hashtable具有装箱和拆箱的操作,所以dictionary的效率要优于hashtable。

ArrayList在数量少的时候效率跟List<>差不多,多的时候(几万以上)要比List慢不少。



38.

SkyBox的使用方式:

import进skybox的官方内置package,然后在摄像机上加Component/Rendenrer/SkyBox的脚本。

在面板中将skybox的材质拖到脚本的public材质对象就好了。





评分

参与人数 4元素币 +10 活跃度 +30 展开 理由
喵星星 + 8 分享快乐~
子桐 + 12 很好的文章
喵喵喵hu... + 10 不错,很有分享意义
狼之独步... + 10 很实用!建议下回发到unity文章区去

查看全部评分

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
残珏  发表于 2017-1-6 13:52:51  
2#
从业不识微元素,做遍项目也枉然
回复 收起回复
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表