C# 对象在试图从屏幕边缘反弹时被卡住,我做错了吗? 公共类:单一行为 { 公共矢量2速度; 公共矢量2方向; 私人矢量2运动; 私人向量机3上信标; 私有向量3底部屏幕绑定; //用于初始化 void Start() { TopScreenBound=Camera.main.ViewportToWorldPoint(新矢量3(0f、1f、0f)); BottomScreenBound=Camera.main.ViewportToWorldPoint(新矢量3(0f,0f,0f)); } //每帧调用一次更新 无效更新() { if(gameObject.transform.position.y>=TopScreenBound.y) { 方向y*=-1; } 如果(gameObject.transform.position.y

C# 对象在试图从屏幕边缘反弹时被卡住,我做错了吗? 公共类:单一行为 { 公共矢量2速度; 公共矢量2方向; 私人矢量2运动; 私人向量机3上信标; 私有向量3底部屏幕绑定; //用于初始化 void Start() { TopScreenBound=Camera.main.ViewportToWorldPoint(新矢量3(0f、1f、0f)); BottomScreenBound=Camera.main.ViewportToWorldPoint(新矢量3(0f,0f,0f)); } //每帧调用一次更新 无效更新() { if(gameObject.transform.position.y>=TopScreenBound.y) { 方向y*=-1; } 如果(gameObject.transform.position.y,c#,unity3d,collision,game-physics,C#,Unity3d,Collision,Game Physics,您必须固定对象的位置以在屏幕内反弹,如果您的对象已经在屏幕外,并且在下一帧中没有完全进入屏幕空间,那么您的对象将无限地改变其方向,直到它进入或离开屏幕 更改此项: public class AsteroidMovement : MonoBehaviour { public Vector2 speed; public Vector2 direction; private Vector2 movement; private Vector3 TopScreenBound; private Vect

您必须固定对象的位置以在屏幕内反弹,如果您的对象已经在屏幕外,并且在下一帧中没有完全进入屏幕空间,那么您的对象将无限地改变其方向,直到它进入或离开屏幕

更改此项:

public class AsteroidMovement : MonoBehaviour
{

public Vector2 speed;
public Vector2 direction;
private Vector2 movement;

private Vector3 TopScreenBound;
private Vector3 BottomScreenBound;

// Use this for initialization
void Start()
{
    TopScreenBound = Camera.main.ViewportToWorldPoint(new Vector3(0f, 1f, 0f));
    BottomScreenBound = Camera.main.ViewportToWorldPoint(new Vector3(0f, 0f, 0f));
}

// Update is called once per frame
void Update()
{
    if (gameObject.transform.position.y >= TopScreenBound.y)
    {
        direction.y *= -1;
    }

    if (gameObject.transform.position.y <= BottomScreenBound.y)
    {
        direction.y *= -1;
    }

    movement = new Vector2(speed.x * direction.x, speed.y * direction.y);
}

void FixedUpdate()
{

    rigidbody2D.velocity = movement;
}
}
if(gameObject.transform.position.y>=TopScreenBound.y)
{
方向y*=-1;
}
if(gameObject.transform.position.y=TopScreenBound.y)
{
gameObject.transform.position.y=TopScreenBound.y;
方向y*=-1;
}
如果(gameObject.transform.position.y)被“卡住”在墙上,你的意思是它碰到了一些魔法屏障并在墙的边界处快速来回反弹?
if (gameObject.transform.position.y >= TopScreenBound.y)
{
    direction.y *= -1;
}

if (gameObject.transform.position.y <= BottomScreenBound.y)
{
    direction.y *= -1;
}
if (gameObject.transform.position.y >= TopScreenBound.y)
{
    gameObject.transform.position.y = TopScreenBound.y;
    direction.y *= -1;
}

if (gameObject.transform.position.y <= BottomScreenBound.y)
{
    gameObject.transform.position.y = BottomScreenBound.y;
    direction.y *= -1;
}