【问题标题】:How to start/stop camera's movement?如何开始/停止相机的运动?
【发布时间】:2016-04-03 06:51:00
【问题描述】:

我有两个摄像头:1 号摄像头和 2 号摄像头。 从场景一开始,摄像机#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 也从场景的开头开始移动。因此,当我换到 2 号摄像机时,我可以看到 2 号摄像机几乎已经到达终点。

我只想在更改为 2 号相机时才开始移动它。

如何开始/停止相机 #2' 的运动? 要么 如何将 2 号摄像机的运动重置为起点?

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

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

    有几个可能的问题:

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

    【讨论】:

    • 还禁用了与 Camera2 相关的 camerapathanimator,这解决了问题。请参阅下面的答案。
    【解决方案2】:

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

    将您的相机放在游戏对象下。那家伙得到了 Animator 并创建了一个动画。

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

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

    【讨论】:

      【解决方案3】:

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

      1. 创建新的游戏对象。
      2. 使用 Camera Path Animator 资源创建 2 个 Camerapaths
      3. 将两个相机路径的“开始播放”值设置为 TRUE
      4. 为游戏对象创建一个新的 C# 脚本。
      5. 将下面的代码填充到 void Update() {}

        foreach(GameObject.FindObjectsOfType(typeof(Camera)) 中的相机 c)) { if ((c.name == "主摄像头")) { 如果 ((c.transform.position.z > -20)) { c.启用=假; foreach(GameObject.FindObjectsOfType 中的相机 d(typeof(Camera))){ if (d.name == "主摄像头 (1)") { foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))) { if (e.name == "主摄像机路径 (1)") { e.启用=真; d.启用=真; } } } } } 别的 { foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))) { if (e.name == "主摄像机路径 (1)") { e.启用=假; } } c.启用=真; } } }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 2022-11-25
        • 2021-01-31
        相关资源
        最近更新 更多