Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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_Unity5 - Fatal编程技术网

C# 缩放精灵的位置始终相同-统一(我做错了什么?)

C# 缩放精灵的位置始终相同-统一(我做错了什么?),c#,unity3d,unity5,C#,Unity3d,Unity5,首先,我对Unity是新手,显然我做错了什么,但我不知道是什么 请看下图。有三个球。最大的一个是原始尺寸(导入),其他两个是缩放的 我写了一个代码,给这些球一个朝向相机右边缘的线性力。摄像机尺寸为10(每个方向为5)。当它到达边缘时,它应该反弹回相机的左侧边缘。它可以工作,但只有原始球到达边缘时才会反弹(其他球也会同时反弹,但它们不应该反弹,因为它们尚未到达边缘) 所有的球都有相同的位置,但有两个球被缩放并从“空中-检查图像”反弹 更改方向的代码位于更新功能中。看起来是这样的: if (rig

首先,我对Unity是新手,显然我做错了什么,但我不知道是什么

请看下图。有三个球。最大的一个是原始尺寸(导入),其他两个是缩放的

我写了一个代码,给这些球一个朝向相机右边缘的线性力。摄像机尺寸为10(每个方向为5)。当它到达边缘时,它应该反弹回相机的左侧边缘。它可以工作,但只有原始球到达边缘时才会反弹(其他球也会同时反弹,但它们不应该反弹,因为它们尚未到达边缘)

所有的球都有相同的位置,但有两个球被缩放并从“空中-检查图像”反弹

更改方向的代码位于更新功能中。看起来是这样的:

if (rigidBody.transform.position.x > 5)
        {

            rigidBody.AddForce(new Vector2(-60,0));


        }

非常感谢您的帮助。

我看到的问题是,您的代码只检查球反弹的位置。这个位置可能是在图像的中心测量的,所以你必须考虑每个球的宽度——实际上,从中心开始,是宽度的一半

要检查图像的位置加半宽度是否已达到限制,可以使用renderer.bounds.size,如中所示:

换言之,球的尺寸越小,x位置必须增长到极限,然后你让它们反弹

但是,我强烈鼓励采用不同的方法来防止所有内容都被硬编码。假设你改变了你的相机尺寸,你就必须重写一切! 我会把碰撞器放在摄像机界限的两侧,当球与它们碰撞时,设置一个
OnCollisionEnter
功能,使它们改变方向。这有点偏离你的问题,所以我就不提了。
祝你好运

我看到的问题是,您的代码只检查球反弹的位置。这个位置可能是在图像的中心测量的,所以你必须考虑每个球的宽度——实际上,从中心开始,是宽度的一半

要检查图像的位置加半宽度是否已达到限制,可以使用renderer.bounds.size,如中所示:

换言之,球的尺寸越小,x位置必须增长到极限,然后你让它们反弹

但是,我强烈鼓励采用不同的方法来防止所有内容都被硬编码。假设你改变了你的相机尺寸,你就必须重写一切! 我会把碰撞器放在摄像机界限的两侧,当球与它们碰撞时,设置一个
OnCollisionEnter
功能,使它们改变方向。这有点偏离你的问题,所以我就不提了。
祝你好运

但是您只检查位置(无论比例如何,位置都是相同的),因此它们将在相同的位置移动。他们的中心在同一个点上。你需要检查球的边缘(当然是左边和右边)。或者您可以将其更改为使用
OnCollisionCenter
,并在屏幕边缘使用碰撞器。您需要完成所有真正基本的Unity教程,但您只检查位置(无论比例如何,位置都将相同),以便它们将在相同的位置移动。他们的中心在同一个点上。你需要检查球的边缘(当然是左边和右边)。或者您可以将其更改为使用
OnCollisionCenter
,并在屏幕边缘安装碰撞器。您需要完成所有真正基本的Unity教程
if ((transform.position.x + renderer.bounds.size.x/2) > 5)
    {
        //change directions
        //do something else...
    }