C# 如果摄像机位于位置2并按下按键,则将其移动到位置3

C# 如果摄像机位于位置2并按下按键,则将其移动到位置3,c#,unity3d,C#,Unity3d,所以我是C#的新手,我试着编写一些代码,将主摄像头移动到位置2,如果它在位置1,则移动到位置3,如果在位置2,但只有在按键的情况下 按键(位置1) 五 主摄像机移到位置2 五 按键(位置2) 五 主摄像机移到位置3 public class CameraMove : MonoBehaviour { // Use this for initialization void Start () { public GameObject TargetPosition

所以我是C#的新手,我试着编写一些代码,将主摄像头移动到位置2,如果它在位置1,则移动到位置3,如果在位置2,但只有在按键的情况下

按键(位置1)

主摄像机移到位置2

按键(位置2)

主摄像机移到位置3

public class CameraMove : MonoBehaviour {

    // Use this for initialization
    void Start () {
        public GameObject TargetPosition
          Targetposition.transform.position = new Vector3(106, 68, 15);
          Targetposition.transform.rotation = new Vector4(106, 68, 15);
          Targetposition.transform.position = new Vector5(106, 68, 15);
          Targetposition.transform.rotation = new Vector6(106, 68, 15);
          Targetposition.transform.position = new Vector7(106, 68, 15);
          Targetposition.transform.rotation = new Vector8(106, 68, 15);
          Targetposition.transform.position = new Vector9(106, 68, 15);
          Targetposition.transform.rotation = new Vector10(106, 68, 15);
    }

    void Update () {
        if (Input.GetKeyDown("space"))
              Maincamera.transform.position=Vector3.Lerp(transform.position, #stack overflow messed up here, side and bottom lines of code are one# 
               Targetposition.transform.position, speed * Time.deltaTime);
    }
}

我已经草拟了一个可行的答案,但你可能需要调整一下

首先,我使用这些变量

Vector3[] vecArray;
int changer;
float speed = 20f;
在开始时,您将用所需的位置填充向量数组

vecArray = new Vector3[] {new Vector3(2,40,90), new Vector3(60, 44, 29) , new Vector3(30, 9, 42) };
现在更新

        if (Input.GetKeyDown("space"))
    {
        changer++;
        if (changer >= vecArray.Length)
            changer = 0;

    }

    //If script is not attached the main camera will need to be found
    //Camera.main works if it is the main camera you are moving

    //first we will lerp toward object
    if (Vector3.Distance(vecArray[changer], transform.position) > .1)
    {
        transform.position = Vector3.Lerp(transform.position,
           vecArray[changer], speed * Time.deltaTime);
    }//snap when close to stop camera lerp if it cannot get exactly to position
    else
        transform.position = vecArray[changer];

此代码将允许您不断切换相机位置,但这很容易改变。快速解释发生了什么。您可以通过每按一次添加一个来更改索引。如果大于数组长度,则返回零。lerp if是一个快速的解决方案,并且是硬编码的。1是为了防止错误的lerp行为。如果您的代码变得更复杂,您甚至可以在列表中使用此代码。如果您仍然不确定发生了什么,只需添加一条评论。

您的意图似乎已经足够清楚,现在请分享您为解决问题所做的任何尝试,以便我们可以查看您的方法。完成+Serlite,但这是我能做的。C#我感到困惑……我已经有一年没有与Unity合作了,但这里有一些想法。将三个位置作为游戏对象放入场景中,这样您可以使用编辑器调整位置和角度,然后您可以在位置和旋转之间进行
Lerp
Slerp
。剩下的是基本的C#问题。跟踪哪个位置是当前位置,哪个位置是目标位置,并使用向上键触发移动到下一个位置。(我会写一个完整的答案,但我没有时间加载Unity并测试它,而且我离开这个平台太久了,无法确保我能马上把它从我的脑袋里拿出来!)每当一个问题以“我是C#新手”开头时,我建议你在进入Unity之前试着熟悉一下该语言。至少不要对自己说,“我对C#完全是个新手”。根据McGuireV10的建议调整我的答案是值得的,使用列表而不是数组(为了灵活性)。谢谢JJMGsoftworks,我想知道这样做是否可行!没问题,如果你是c#新手,想与Unity合作,我建议你研究集合并正确使用对象。正如你所见,它会派上用场的。