可从 Inspector 编辑的转换列表

List of Transforms editable from Inspector

我正在使用 Unity 5,我需要创建一个变换列表,以便在检查器中修改它们(位置和旋转)以模拟不同的相机。此模拟用于演示,就像演示期间相机自行移动一样。

我目前有一个转换列表,但我不知道如何在检查器中修改它们并在运行时更改它们的位置?

编辑:2015 年 11 月 18 日

这是解决方案,如果在我朋友的帮助下找到更了解 unity 真正作用的方法,希望它能对您有所帮助,再次感谢您的所有回复,它对我帮助很大 :D :

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MoveCamera : MonoBehaviourSingleton<MoveCamera>
{
    public List<Transform> cameraPositions = new List<Transform>();

    private Transform m_Target;
    private float m_Speed;
    private bool m_Translate;
    private bool m_Rotate;

    public void SwitchToNext(int index, float speed)
    {
        m_Target = cameraPositions[index];
        m_Translate = true;
        m_Rotate = true;
    }

    public void Update()
    {
        if (m_Target != null && (m_Translate || m_Rotate))
        {
            float ratio = Time.deltaTime * m_Speed;
            transform.position = Vector3.Lerp(transform.position, m_Target.position, ratio);
            transform.rotation = Quaternion.Slerp(transform.rotation, m_Target.rotation, ratio);

            if (Vector3.Distance(transform.position, m_Target.position) < 0.001f)
            {
                transform.position = m_Target.position;
                m_Translate = false;
            }
            if (Quaternion.Angle(transform.rotation, m_Target.rotation) < 0.001f)
            {
                transform.rotation = m_Target.rotation;
                m_Rotate = false;
            }
        }
    }
}

好的,让我们看看这是否对您有帮助。(假设您需要这个,我会编写我的代码) 您的场景中有 x 个游戏对象。

您将需要一个游戏对象列表。假设您通过

获得它们
public List<GameObject> myObjectList = new List<GameObject>();
public List<Transform> myTransformList =  new List<Transform>();
myObjectList = GameObject.FindGameObjectsWithTag("YourCustomTagHere");

foreach(Gameobject g in myObjectList)
{
 myTransformList.Add(g.transform);
}

我不知道这段代码是否有效,我现在不能测试它,但我认为逻辑是存在的。继续尝试一些事情,无论您是否成功,都请提供一些反馈。

我建议在您的 MoveCamera 脚本中只添加一个简单的 public 列表,然后将目标拖到该列表中。这样做你可以完全控制对象的顺序,因此你可以从相机位置 nn + 1 进行动画转换。

public List<Transform> cameraPositions = new List<Transform> ();

也许一个简单的序列不符合您的要求,您需要一种更复杂的方法来决定允许哪个位置切换到另一个位置。在这种情况下,我会建议一个帮助脚本,例如CameraTransition.cs。您可以在此处放置检查逻辑和定义参数。

将此附加到每个允许的目标位置对象,并将 MoveCamera 中的列表替换为 List<CameraTransition>