Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法让相机在游戏中跟随不同的游戏对象?c#2d_C#_Camera_Unity2d - Fatal编程技术网

有没有办法让相机在游戏中跟随不同的游戏对象?c#2d

有没有办法让相机在游戏中跟随不同的游戏对象?c#2d,c#,camera,unity2d,C#,Camera,Unity2d,我已经有了unity默认的摄像头跟踪播放器。但我想让它在一个角色和另一个角色之间切换,这取决于我激活的那个角色。到目前为止我所拥有的只是 using UnityEngine; using System.Collections; public class cameraFollow : MonoBehaviour { public Transform player; public Transform player2; void Update () { transform.positi

我已经有了unity默认的摄像头跟踪播放器。但我想让它在一个角色和另一个角色之间切换,这取决于我激活的那个角色。到目前为止我所拥有的只是

using UnityEngine;
using System.Collections;

public class cameraFollow : MonoBehaviour {

public Transform player;
public Transform player2;

void Update () 
{
    transform.position = new Vector3 (player.position.x + .5f, player.position.y + .55f, -7.2f);
    }
    if(Input.GetKeyDown(KeyCode.Space)){
    //switch to player2
    }
}

有没有一种方法可以做到这一点,或者我应该专注于学习如何做到这一点?谢谢。

首先,您的代码似乎无法编译,因为
if
语句位于可以执行它的任何块之外。仔细检查括号,并相应地缩进代码

要实现您想要的,请执行以下操作。添加一个
else
块,将当前的跟随代码移动到该块,并将其他对象的跟随代码添加到已存在的
if
块中:

if (Input.GetKeyDown(KeyCode.Space)) {
    transform.position = new Vector3(player2.position.x + .5f, player2.position.y + .55f, -7.2f);
}
else {
    transform.position = new Vector3(player.position.x + .5f, player.position.y + .55f, -7.2f);
}
确保在
Update
方法中获取上述所有代码

您可能还想考虑删除诸如“代码> > 5F 、<代码> .55 f < /代码>和<代码> -7.2F 之类的神奇数字,并用命名良好的变量替换它们。例如,

var offset=newvector3(.5f、.55f、-7.2f)
可能没问题


作为一般性建议,它将有助于首先提高您的编程技能。我怀疑在创建游戏的同时学习是保持动力的好方法,但同时,如果你更熟悉一般编程,你会遇到这样的问题,这很容易避免。虽然没有错误的学习方法,但如果这对你来说是一个好方法,那就去吧

首先,您的代码似乎无法编译,因为
if
语句位于可以执行它的任何块之外。仔细检查括号,并相应地缩进代码

要实现您想要的,请执行以下操作。添加一个
else
块,将当前的跟随代码移动到该块,并将其他对象的跟随代码添加到已存在的
if
块中:

if (Input.GetKeyDown(KeyCode.Space)) {
    transform.position = new Vector3(player2.position.x + .5f, player2.position.y + .55f, -7.2f);
}
else {
    transform.position = new Vector3(player.position.x + .5f, player.position.y + .55f, -7.2f);
}
确保在
Update
方法中获取上述所有代码

您可能还想考虑删除诸如“代码> > 5F 、<代码> .55 f < /代码>和<代码> -7.2F 之类的神奇数字,并用命名良好的变量替换它们。例如,

var offset=newvector3(.5f、.55f、-7.2f)
可能没问题


作为一般性建议,它将有助于首先提高您的编程技能。我怀疑在创建游戏的同时学习是保持动力的好方法,但同时,如果你更熟悉一般编程,你会遇到这样的问题,这很容易避免。虽然没有错误的学习方法,但如果这对你来说是一个好方法,那就去吧

我明白了。感谢Xying让我开始编写代码,这非常重要。这是代码

using UnityEngine;
using System.Collections;

public class cameraFollow : MonoBehaviour {

public Transform player;
public Transform player2;
private bool idleFollow = true;
private bool mountFollow = false;

void Update ()
{
    if (!mountFollow && idleFollow && Input.GetKeyDown (KeyCode.Space)) 
    {
        mountFollow = true;
        idleFollow = false;
        return;
    }

    if (mountFollow && !idleFollow && Input.GetKeyDown(KeyCode.Space))
    {
        idleFollow = true;
        mountFollow = false;
        return;
    }

    if (idleFollow && !mountFollow) 
    {
        transform.position = new Vector3 (player.position.x + .5f, player.position.y + .55f, -7.2f);
    }

    if (mountFollow && !idleFollow)
    {
        transform.position = new Vector3 (player2.position.x + .5f, player2.position.y + .55f, -7.2f);
    }
}

}我明白了。感谢Xying让我开始编写代码,这非常重要。这是代码

using UnityEngine;
using System.Collections;

public class cameraFollow : MonoBehaviour {

public Transform player;
public Transform player2;
private bool idleFollow = true;
private bool mountFollow = false;

void Update ()
{
    if (!mountFollow && idleFollow && Input.GetKeyDown (KeyCode.Space)) 
    {
        mountFollow = true;
        idleFollow = false;
        return;
    }

    if (mountFollow && !idleFollow && Input.GetKeyDown(KeyCode.Space))
    {
        idleFollow = true;
        mountFollow = false;
        return;
    }

    if (idleFollow && !mountFollow) 
    {
        transform.position = new Vector3 (player.position.x + .5f, player.position.y + .55f, -7.2f);
    }

    if (mountFollow && !idleFollow)
    {
        transform.position = new Vector3 (player2.position.x + .5f, player2.position.y + .55f, -7.2f);
    }
}

}

o好的。我下班回家后再试试。对于这个小错误我很抱歉,顺便说一句,我最初在脚本中没有这个,我只是把它作为一个例子,我正试图完成,使它更清楚一点。在以后的问题中,我绝对不会再这样做了。哈哈,对不起,我好久没回复了。所以不管怎么说,代码只有一种工作方式。我希望你能前后切换相机。到目前为止,它遵循的是一个,而不是另一个。当我使用代码将其切换回原处时,相机会跳到它的位置,但在移动时不会跟随它。你需要将当前跟随的对象存储在一个字段中,当按下开关键(或任何触发开关的东西)时,会更新该字段。然后在Update method.yea中相应地设置您的位置。我做到了。但它的结果是,摄像机停止跟踪他们两人。当我在任一帧之间切换相机时,相机会更新其位置,就好像相机不是每帧都更新一样,但它处于更新功能中。o ok。我下班回家后再试试。对于这个小错误我很抱歉,顺便说一句,我最初在脚本中没有这个,我只是把它作为一个例子,我正试图完成,使它更清楚一点。在以后的问题中,我绝对不会再这样做了。哈哈,对不起,我好久没回复了。所以不管怎么说,代码只有一种工作方式。我希望你能前后切换相机。到目前为止,它遵循的是一个,而不是另一个。当我使用代码将其切换回原处时,相机会跳到它的位置,但在移动时不会跟随它。你需要将当前跟随的对象存储在一个字段中,当按下开关键(或任何触发开关的东西)时,会更新该字段。然后在Update method.yea中相应地设置您的位置。我做到了。但它的结果是,摄像机停止跟踪他们两人。当我在任一帧之间切换相机时,相机会更新其位置,就好像相机不是每帧都更新一样,但它处于更新功能中。