2014-04-22 2 views
0
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; 
} 
} 

내 게임에서 소행성이 내 화면 가장자리에서 튀어 나오려고하고 있는데 제대로 작동하지만 소량의 바운스 후에 소행성/물체가 벽에 붙어서 고장났습니다. 놀이터.화면 가장자리에서 튀어 나오려고 할 때 개체가 멈추는 경우가 있습니까?

내가 잘못 생각하고 있습니까? 나는 코드에서 소행성이 몇 번 반송 된 후에 붙어있는 소행성을 어디에서 볼 수 없는지 알 수 없습니다. 미리 감사드립니다.

+0

, 당신이 어떤 마법의 장벽을 명중 벽 경계에서 앞뒤로 빠르게 튀어 의미합니까? – Brandon

답변

2

안에의 물체가 이미 화면 바깥에 튀어 오도록 물체의 위치를 ​​고쳐야합니다. 다음 프레임의 화면 공간에 완전히 들어 가지 않으면 오브젝트가 화면으로 들어 오거나 나갈 때까지 방향이 무한대로 변경됩니다.

변경이 : 여기에

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; 
} 
관련 문제