如何开始/停止相机的移动?

时间:2015-12-29 11:35:35

标签: unity3d unityscript

我有两个摄像头:摄像头#1和摄像头#2。 从场景一开始,Camera#1启用并显示场景。过了一会儿,我正在改用Camera#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也从场景的开头开始移动。所以当我换到Camera#2时,我可以看到Camera#2几乎完成了他的终点。

我只想在换到它时启动Camera#2的动作。

如何开始/停止相机#2'的移动? 要么 如何将Camera#2的移动重置为起点?

(我正在使用Camera Path Animator资产。)

3 个答案:

答案 0 :(得分:2)

有几个可能的问题:

  • 摄像机#2从一开始就没有被禁用,因此它的运动就会执行。通过在编辑器中禁用它来解决此问题。
  • 摄像机#2'路径动画制作器未连接到摄像机#2。因此,即使相机#2是,它也不会被禁用。通过将Animator放在相机#2上,或通过其他方式禁用它来解决这个问题。
  • Camera#2是Camera#1的孩子,因此继承了Camera#1的翻译。通过将Camera#2移出相机#1
  • 来解决这个问题

答案 1 :(得分:1)

我会考虑在整个上下文中使用动画(如果可能的话)。看来你正在制作某种电影动画。

将相机放在GameObject下。那家伙得到Animator并制作动画。

该动画将控制位置以及是否随着时间推移启用相机。动画曲线和dopesheet可以轻松有效地控制。最重要的是,如果需要调用一些外部方法,也可以使用AnimationEvent。

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

答案 2 :(得分:0)

这是禁用camerapathanimator并停止Camera#2移动直到Camera#1到达特定坐标的代码。

  1. 创建新的Gameobject。
  2. 使用Camera Path Animator资产创建2个Camerapaths
  3. 将两个摄像机路径的“Play on start”值设置为TRUE
  4. 为Gameobject创建一个新的C#脚本。
  5. 将下面的代码改为void Update(){}

    foreach(GameObject.FindObjectsOfType中的Camera c(typeof(Camera))){     if((c.name ==“Main Camera”)){         if((c.transform.position.z> -20)){             c.enabled = false;             foreach(GameObject.FindObjectsOfType中的Camera d(typeof(Camera))){                 if(d.name ==“Main Camera(1)”){                     foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))){                         if(e.name ==“Main Camera Path(1)”){                             e.enabled = true;                             d.enabled = true;                         }                     }                 }             }         } else {             foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))){                 if(e.name ==“Main Camera Path(1)”){                     e.enabled = false;                 }             }             c.enabled = true;         }     } }