zoukankan      html  css  js  c++  java
  • Unity3d操作的一些技巧知识点和BUG解决方案

    自己记录一些东西,转载请良心注明出处。

     
     
    1.如何同时打开两个UNITY3D项目。
    有时候需要对比,或者需要添加另一个项目的某资源到目前项目,同时打开两个项目看起来会比较明了。如果直接打开的话,发现它说有重复项目已经被打开而提示错误不能打开。
     
    此刻就需要设置一些unity preferences了,从edit处打开。勾上下图红圈圈就可以了,always show project wizard(打开项目前永远显示项目向导)。选完这个之后每次打开就会让你选择项目路径了。
    Unity3d操作的一些技巧知识点和BUG解决方案
     
    如果需要同一个项目打开在两个UNITY3D的话,那么需要下载不同版本的UNITY3D。
     
     
    2.collider的碰撞检测,即便是在collider里面也一样触发。
    Unity3d操作的一些技巧知识点和BUG解决方案
    上图是测试,原本所有面包都在蓝色方块上,有事件当面包触发到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,里面可以拉多个透明度的点。
    Unity3d操作的一些技巧知识点和BUG解决方案

    Unity3d操作的一些技巧知识点和BUG解决方案

    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.
    模型莫名期末有很多particle view*物体。(转)
    在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材质对象就好了。
  • 相关阅读:
    可爱的中国电信 请问我们的电脑还属于我们自己吗?
    了解客户的需求,写出的代码或许才是最优秀的............
    DELPHI DATASNAP 入门操作(3)简单的主从表的简单更新【含简单事务处理】
    用数组公式获取字符在字符串中最后出现的位置
    在ehlib的DBGridEh控件中使用过滤功能(可以不用 MemTableEh 控件 适用ehlib 5.2 ehlib 5.3)
    格式化json返回的时间
    ExtJs中使用Ajax赋值给全局变量异常解决方案
    java compiler level does not match the version of the installed java project facet (转)
    收集的资料(六)ASP.NET编程中的十大技巧
    收集的资料共享出来(五)Asp.Net 权限解决办法
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6424884.html
Copyright © 2011-2022 走看看