Unity3d 是什么使该代码与Y轴而不是X轴一起工作?

Unity3d 是什么使该代码与Y轴而不是X轴一起工作?,unity3d,math,vector,position,Unity3d,Math,Vector,Position,所以我正在制作一个带有闪烁功能和固定摄像头的游戏,所以我当然不希望玩家能够离开摄像头。因此,我的解决方案是不让玩家通过闪烁的相机边界。问题是,它对Y轴的效果令人惊讶,但对X轴的效果却不太好。(transform.lossy比例在我找到一个真实的精灵之前是一个占位符&幻数是相机边缘所在的位置) if((transform.position+=(Vector3)aim*slashDistance).x=8.9f) { transform.position+=(Vector3)aim*(8.9f-tr

所以我正在制作一个带有闪烁功能和固定摄像头的游戏,所以我当然不希望玩家能够离开摄像头。因此,我的解决方案是不让玩家通过闪烁的相机边界。问题是,它对Y轴的效果令人惊讶,但对X轴的效果却不太好。(transform.lossy比例在我找到一个真实的精灵之前是一个占位符&幻数是相机边缘所在的位置)

if((transform.position+=(Vector3)aim*slashDistance).x=8.9f)
{
transform.position+=(Vector3)aim*(8.9f-transform.position.x-(transform.lossyScale.x/2));
}
if((transform.position+=(Vector3)aim*slashDistance).y=5f)
{
transform.position+=(Vector3)aim*(5f-transform.position.y-(transform.lossyScale.y/2));
}

如果条件:

transform.position += (Vector3)aim * slashDistance
这句话有副作用——它会让玩家动起来。因此,每次评估四个条件中的任何一个时,您都将移动玩家。不太合理。因此,当你移动到允许的x范围之外时,第一个方块会将玩家移回到里面。但是,第二个挡块将球员再次移动到范围之外,y形检查将无法对此进行补偿。所以,简单地把效果放在你的条件之外。这也将使您的代码更易于阅读:

transform.position += (Vector3)aim * slashDistance
if (transform.position.x <= -8.9f)
{
    transform.position += (Vector3)aim * (8.9f + transform.position.x - (transform.lossyScale.x / 2));
}
else if (transform.position.x >= 8.9f)
{
    transform.position += (Vector3)aim * (8.9f - transform.position.x - (transform.lossyScale.x / 2));
}

if (transform.position.y <= -5f)
{
    transform.position += (Vector3)aim * (5f + transform.position.y - (transform.lossyScale.y / 2));
}
else if (transform.position.y >= 5f)
{
    transform.position += (Vector3)aim * (5f - transform.position.y - (transform.lossyScale.y / 2));
}
transform.position+=(Vector3)aim*slashDistance
if(变换位置x=8.9f)
{
transform.position+=(Vector3)aim*(8.9f-transform.position.x-(transform.lossyScale.x/2));
}
if(变换位置y=5f)
{
transform.position+=(Vector3)aim*(5f-transform.position.y-(transform.lossyScale.y/2));
}

如果条件:

transform.position += (Vector3)aim * slashDistance
这句话有副作用——它会让玩家动起来。因此,每次评估四个条件中的任何一个时,您都将移动玩家。不太合理。因此,当你移动到允许的x范围之外时,第一个方块会将玩家移回到里面。但是,第二个挡块将球员再次移动到范围之外,y形检查将无法对此进行补偿。所以,简单地把效果放在你的条件之外。这也将使您的代码更易于阅读:

transform.position += (Vector3)aim * slashDistance
if (transform.position.x <= -8.9f)
{
    transform.position += (Vector3)aim * (8.9f + transform.position.x - (transform.lossyScale.x / 2));
}
else if (transform.position.x >= 8.9f)
{
    transform.position += (Vector3)aim * (8.9f - transform.position.x - (transform.lossyScale.x / 2));
}

if (transform.position.y <= -5f)
{
    transform.position += (Vector3)aim * (5f + transform.position.y - (transform.lossyScale.y / 2));
}
else if (transform.position.y >= 5f)
{
    transform.position += (Vector3)aim * (5f - transform.position.y - (transform.lossyScale.y / 2));
}
transform.position+=(Vector3)aim*slashDistance
if(变换位置x=8.9f)
{
transform.position+=(Vector3)aim*(8.9f-transform.position.x-(transform.lossyScale.x/2));
}
if(变换位置y=5f)
{
transform.position+=(Vector3)aim*(5f-transform.position.y-(transform.lossyScale.y/2));
}

Cheers@NicoSchertler,编程一年半了,我不知道if中的代码会影响变量。我现在觉得自己完全是个新手。谢谢你的帮助,伙计!另外,如果你知道为什么原始代码在Y轴上完美地工作,但在X轴上却不完美,请告诉我。因为Y轴代码是最后一个,之后没有任何东西可能会恢复效果。Cheers@NicoSchertler,编程一年半了,我不知道if中的代码会影响变量。我现在觉得自己完全是个新手。谢谢你的帮助,伙计!另外,如果你知道为什么原始代码在Y轴上完美地工作,但在X轴上却不完美,请告诉我。因为Y轴代码是最后一个,之后没有任何东西可以恢复效果。