【基础知识】Unity查漏补缺

最近发现了一些平时不太注重的知识点,特此建立个专题,把零散的东西、疏忽的东西临时记录下来。

Mecanim动画系统:

1)设置AnimatorController时,如果某个动作播放不正常。

首先打开不正常的FBX动作的Inspector面板的Animations属性

      然后对如下选项进行检查:

   LoopTime:动画结束后是否进行循环播放(在走、跑等动作中,要注意勾选此选项)

   ----LoopPose:无缝循环动作(勾选)

   Root Transform Rotation:根旋转变换

   Root Transform Position(Y):根位置变换(Y)

   Root Transform Position(XZ):根位置变换(XZ)

   ----Bake into Pose:是否将根运动保存进骨骼里面。(关闭此选项后,游戏对象的旋转、位置将不受动画的影响)

      再检查时间轴的起始点和终止点,根据需求确认4个loop match的灯状态(绿灯时表示开始帧和结束帧为同样的一个造型)。

2)对一次性动画,比如Run动画过程中发生的Jump动画,在Jump结束后的转换状态条件中,必须要添加ExitTime属性,确保动画播放完成。

   

Network类:

1)服务器端和客户端的代码分两个场景保存导出,避免使用RPC发送消息时,客户端无法接受到消息的情况发生。

 

预制件:

使用多个预制件进行场景动态加载时,需要注意两方面内容:

1.各个预制件的实例化顺序:摄像机、灯光、场景、UI、其他功能(注意依赖关系)

2.各个预制件之间的引用关系。避免在预制件的Inspector窗口中引用其他预制件的组件。

例如预制件A和预制件B,预制件A的Inspector窗口中引用了预制件的B。

在这两个预制件进行实例化后,游戏对象A的Inspector窗口中仍然引用的是预制件B。

因此,解决方法目前想到两种:

1.采用单例模式引用预制件B

1     /// <summary>
2     /// 响应切换按钮,切换摄像机
3     /// </summary>
4     public void SwitchCamera()
5     {
6         SwitchCameraController.Instance.SwitchCamera();
7     }

2.采用代码动态加载其他预制件

1     private GameObject[] m_EnemyPath;                       // 敌人移动路径
2     void Awake()
3     {
4         // 获取敌人移动路径
5         m_EnemyPath = GameObject.FindGameObjectsWithTag(TagManage.PathTag);
6     }

 

posted @ 2015-05-21 11:11  沐小沫  阅读(290)  评论(0编辑  收藏  举报