Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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# 摄像机未正确居中于两个游戏对象之间 我有一个按钮,使主相机在多个对象中间切换。_C#_Unity3d - Fatal编程技术网

C# 摄像机未正确居中于两个游戏对象之间 我有一个按钮,使主相机在多个对象中间切换。

C# 摄像机未正确居中于两个游戏对象之间 我有一个按钮,使主相机在多个对象中间切换。,c#,unity3d,C#,Unity3d,例如,有[StartPoint,CheckPoint,CheckPoint,EndPoint] 我希望摄像机在检查点之间连续切换,就像检查点之间的逗号一样^^ 此代码是实际切换主摄像头位置的代码(可能存在错误) 在相机保持在相同位置或关闭两个值后,相机切换最适合前两个检查点(起点和终点或起点和检查点)。我使用Debug.Log()进行了检查;要查看相机之间是否有正确的游戏对象,为什么不工作 中心点应该是所有点的平均值,因此您需要添加点,而不是减去点,然后将结果除以平均值包含的点数 center=

例如,有[StartPoint,CheckPoint,CheckPoint,EndPoint]

我希望摄像机在检查点之间连续切换,就像检查点之间的逗号一样^^

此代码是实际切换主摄像头位置的代码(可能存在错误)

在相机保持在相同位置或关闭两个值后,相机切换最适合前两个检查点(起点和终点或起点和检查点)。我使用Debug.Log()进行了检查;要查看相机之间是否有正确的游戏对象,为什么不工作


中心点应该是所有点的平均值,因此您需要添加点,而不是减去点,然后将结果除以平均值包含的点数

center=sum(points)/count(points)
,所以
center=(a+b)/2


或者,如果您发现Vector3.Lerp(a,b,0.5f)更具可读性,尽管从技术上讲这会更慢,因为它既是一个方法调用,又是更多的操作,除非编译器在幕后做一些奇特的事情……

您正在通过变换索引对游戏对象进行排序。您确定排序后,开始点和结束点仍分别位于列表的开始和结束处吗?看看在插入/添加之前移动排序时会发生什么。是的,我选中了,按正确的顺序列出,移动正确是数学问题吗?两个点之间的中心点不是这样的吗(对于一维):
centerPoint=x2-((x2-x1)/2)
?例如,10和2之间的中心是6,但是你的公式会产生4。
center=(a+b)/2
,而不是
(a-b)/2
也可以使用
Vector3.Lerp(a,b,0.5f)
,如果需要的话。@cwharis就是这样,谢谢!哇,这样一个愚蠢的错误慢的部分可能不是真的,Lerp是一个负运算加上一个乘法(乘法可以在芯片上比除法更快)。对其中的最后一个参数进行了钳制检查,因此Vector3.lerpunclipped可能会更快。Vector3的运算符重载+和/都是方法调用。顺便说一句,运算符重载只是为类提供语法糖,以提供更好的体验。确定。不过,这还需要更多的计算。编译器将处理一些琐碎的优化,例如
/2
vs
*0.5
vs
>2
。甚至可以将运算符/方法联机。甚至可以通过静态分析将
lerp(a,b,0.5)
转换为
(a+b)*0.5
。谁知道呢。仍然很好的实践,IMO,考虑这些事情(虽然简单),特别是如果你是一个多语言,其中一些语言可能没有好的编译器。
public void SwitchCameraBetween(GameObject nextPoint, GameObject afterNextPoint)
{
    Vector3 centerPoint = (afterNextPoint.transform.position - nextPoint.transform.position) / 2;
    centerPoint.z = -10;

    float cameraSize = (afterNextPoint.transform.position - nextPoint.transform.position).magnitude - nextPoint.transform.localScale.x;

    mainCamera.transform.position = centerPoint;
    mainCamera.orthographicSize = cameraSize / 3;
}