如何启动/停止相机的运动?



我有两个相机:相机#1和相机#2。从场景开始,摄影机#1即被启用并显示场景。过了一段时间,我将更改为相机#2(启用它以便它可以显示场景)。

这是我的代码:

        foreach(Camera c in  GameObject.FindObjectsOfType(typeof(Camera))) 
        {
            if ((c.name == "Camera #1") && (c.transform.position.x>30))
            {
                c.enabled = false;

                foreach(Camera d in  GameObject.FindObjectsOfType(typeof(Camera))) 
                {
                    if(d.name == "Camera #2") 
                    {
                        d.enabled = true;
                    }
                }
            }

我可以成功地在相机之间切换,但我有一个问题:不仅是#1相机,#2相机也从场景的一开始就开始移动。所以当我换到2号相机时,我可以看到2号相机几乎完成了到达终点的过程。

我想只有当我换到2号相机时才开始移动。

如何启动/停止相机#2的移动?或如何将2号摄像机的移动重置到其起点?

(我使用的是Camera Path Animator资产。)

有几个可能的问题:

  • 2号摄像机从一开始就没有被禁用,所以它的移动会执行。通过在编辑器中禁用它来解决此问题
  • 摄影机#2的路径动画器未附加到摄影机#2。正因为如此,即使2号摄影机是,它也不会被禁用。通过将动画制作者放在2号摄影机上或通过其他方式禁用它的移动来解决这个问题
  • 摄影机#2是摄影机#1的子摄影机,因此继承了摄影机#1的平移。通过将2号摄影机移出1号摄影机来解决此问题

如果可能的话,我会考虑在整个上下文中使用动画。你好像在制作某种电影动画。

将你的相机放在GameObject下面。那个家伙得到了Animator并创建了一个动画。

该动画将控制位置以及相机是否随时间启用。动画曲线和dopesheet允许轻松有效的控制。除此之外,如果需要调用一些外部方法,还可以使用AnimationEvent。

http://docs.unity3d.com/Manual/class-AnimatorController.html

以下是禁用camerapathanimator并停止2号摄影机移动直到1号摄影机到达特定坐标的代码。

  1. 创建新的游戏对象
  2. 使用"摄影机路径动画器"资源创建2个摄影机
  3. 将两个camerapath的"开始播放"值设置为TRUE
  4. 为游戏对象创建一个新的C#脚本
  5. 将下面的代码填充为空Update(){}

    foreach(GameObject.FindObjectsOfType中的相机c(类型为(相机)){if((c.name="主摄像头"){if((c.transform.position.z>-20)){c.enabled=false;foreach(GameObject.FindObjectsOfType中的相机d(类型为(相机)){if(d.name="主摄像头(1)"){foreach(GameObject.FindObjectsOfType中的CameraPathAnimationtor e(类型为(CameraPathAnimator)){if(e.name="主摄像头路径(1)"){e.enabled=true;d.enabled=true;}}}}}其他{foreach(GameObject.FindObjectsOfType中的CameraPathAnimationtor e(类型为(CameraPathAnimator)){if(e.name="主摄像头路径(1)"){e.enabled=false;}}c.enabled=true;}}}

最新更新