我是新来的
Unity
。private void FixedUpdate()
{
Vector3 desiredPosition = target.position + offset;
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
if (PisauScript.nonaktifkamera.manjat == true)
{
offset.x = -5;
offset.y = 14;
offset.z = 6;
}
else if (PisauScript.nonaktifkamera.manjat2 == true)
{
offset.x = -14;
offset.y = 25.5f;
offset.z = 6;
}
else if (PisauScript.nonaktifkamera.manjat4 == true)
{
offset.x = -46;
}
else if (PisauScript.nonaktifkamera.manjat5 == true)
{
offset.x = -62.7f;
offset.y = 17.5f;
}
//else if { }
//...
//else if { }
避免大量 if/else 测试的一个想法,
按照您的示例,您只有一个(if/else if)true
所以改变你的逻辑来使用索引:
假设你有:
PisauScript.nonaktifkamera.manjat = 0 for PisauScript.nonaktifkamera.manjat = true
PisauScript.nonaktifkamera.manjat = 1 for PisauScript.nonaktifkamera.manjat1 = true
PisauScript.nonaktifkamera.manjat = 2 for PisauScript.nonaktifkamera.manjat2 = true
等等.. 我的第一个想法是使用字典,但你可以在这里使用数组
您创建了一个向量3的数组:
public Vector3[] vector = new Vector3[50];
然后加载所有值(遵循 if/else if 测试):
vector[0] = new Vector3(-5f, 14f, 6f));
vector[1] = new Vector3(-14f, 25.5f, 6f));
vector[2] = new Vector3(-14f, float.NegativeInfinity, float.NegativeInfinity));
:
:
我使用 float.NegativeInfinity 来表示我不想更改该值。
最后你只需要用通用方法测试一个值即可
private void FixedUpdate()
{
:
:
var v = vector[PisauScript.nonaktifkamera.manjat];
if(!float.IsNegativeInfinity(v.x)) offset.x = v.x;
if(!float.IsNegativeInfinity(v.y)) offset.y = v.y;
if(!float.IsNegativeInfinity(v.z)) offset.z = v.z;
}
我没有测试过错误..
我建议你使用unity分析器...来看看你在哪里消耗了cpu
因为你确定使用大量
if/else if
的性能真的很差吗?
有一个博客可能对您有用。
此外,如果您确实想避免 if-else 语句,则可以尝试无分支编程。这肯定会增加 fps。
如果您仅使用
else if
而不是 if
,那么您只有一个 true 布尔值。因此,您可以列出 Vector3
(或 floats
,这是您的选择)和一个 int
,而不是 bools
。
像这样的东西:
List<Vector3> vectors=new List<Vector3>(){new Vector3(-5f,14,6)};
int selectedvector=0;
private void FixedUpdate()
{
Vector3 desiredPosition = target.position + offset;
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
transform.position = smoothedPosition;
offset=vectors[selectedvector];
}