我正在使用Unity 5,我需要创建一个变换列表,以便在检查器中修改它们(位置和旋转)以模拟不同的摄像机。这种模拟用于演示,就像在演示期间自行移动的相机一样。
我目前有一个转换列表,但我不知道如何在检查器中修改它们并在运行时更改它们的位置?
编辑:18/11/15
这是一个解决方案,如果在我的朋友的帮助下找到更多的意识到什么是真正的团结,希望它会帮助你,并再次感谢你的回复它帮助了我很多: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;
}
}
}
}
答案 0 :(得分:2)
好的,看看这是否对你有所帮助。(我会编写我的代码,假设你想要这个) 你的场景中有x个游戏对象。
您需要一个GameObject列表。让我们说你做到了
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);
}
我不知道这段代码是否有效,我现在无法测试,但我认为逻辑就在那里。来吧,尝试一些事情,给出一些反馈,无论你是否成功。
答案 1 :(得分:1)
我建议您在MoveCamera
脚本中添加一个简单的公开列表,然后将目标拖到该列表中。这样做可以完全控制对象的顺序,因此您可以从摄像机位置 n 到 n + 1 进行动画过渡。
public List<Transform> cameraPositions = new List<Transform> ();
也许一个简单的序列不符合您的要求,您需要一种更复杂的方法来决定允许哪个位置切换到哪个位置。在这种情况下,我建议一个帮助脚本,例如CameraTransition.cs
。在这里,您可以放置检查逻辑和定义参数。
将此附加到每个允许的目标位置对象,并将MoveCamera
中的列表替换为List<CameraTransition>
。