सबसे पहले, मुझे अपनी अंग्रेजी के लिए खेद है। मुझे उम्मीद है कि मैं इसे सही ढंग से समझा सकता हूं मेरे खेल में, गेंद को किनारे पर हर जगह उछालना चाहिए। एक वीडियो से मेरे पास मैदान में गेंद के साथ एक कोड है, हालांकि, गेंद अब ऊपर कूदती है और स्क्रीन के साथ स्लाइड करती है

मैंने अगर कथन की कोशिश की है, लेकिन मैं नौसिखिया हूं और नहीं जानता कि क्या मुझे यह सही लगा है?

public class Ball_Controller : MonoBehaviour

{ [SerializeField] निजी फ्लोट चाल गति = १०f;

[SerializeField] private Vector2 startDirection;

[SerializeField] private Vector2 startOtherDirection;

private Rigidbody2D rb;

public static bool GameIsover;
public GameObject gameOverUI;


public Transform topLeft;
public Transform bottomRight;





private void Start()
{



    GameIsover = false;

}
void Update()
{
    BallMove();


    transform.position = new Vector3(Mathf.Clamp(transform.position.x, topLeft.position.x, bottomRight.position.x), Mathf.Clamp(transform.position.y, bottomRight.position.y, topLeft.position.y), transform.position.z);
    if (transform.position.y == Screen.height || transform.position.x == Screen.width)
    {

        BallMoveOther();
    }





    if (GameIsover)
        return;

    if (Input.GetKeyDown("e"))
    {
        EndGame();


    }



}



void EndGame()
{

    Debug.Log("Game Over");
    GameIsover = true;
    gameOverUI.SetActive(true);
    Time.timeScale = 0;


}



private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.tag.Equals ("Player"))
    {

        Destroy(collision.gameObject);
        Destroy(gameObject);
        EndGame();
    }




}

private void BallMove()
{
    rb = GetComponent<Rigidbody2D>();

    rb.velocity = moveSpeed * startDirection;
}
private void BallMoveOther()
{
    rb = GetComponent<Rigidbody2D>();
    rb.velocity = moveSpeed * startOtherDirection;
}

}

0
Dario .b 19 अक्टूबर 2019, 18:10

1 उत्तर

सबसे बढ़िया उत्तर

समस्या नीचे दिए गए कोड के साथ है,

transform.position = new Vector3(Mathf.Clamp(transform.position.x, topLeft.position.x, bottomRight.position.x), Mathf.Clamp(transform.position.y, bottomRight.position.y, 
topLeft.position.y), transform.position.z);

if (transform.position.y == Screen.height || transform.position.x == Screen.width){
    BallMoveOther();
}
  1. स्क्रीन की सीमा का पता लगाने के लिए अलग-अलग ऑब्जेक्ट के इस्तेमाल से बचें
  2. इफ स्टेटमेंट में ट्रांसफॉर्म.पोजिशन.y एक ग्लोबल पोजीशन है, जबकि स्क्रीन.हाइट नहीं है।

कुछ इस तरह का प्रयास करें:

// Converting Screen positions to world space
Vector3 screenStart = Camera.main.ScreentoWorldPoint(new Vector3(0,0,0));
Vector3 screenEnd = Camera.main.ScreentoWorldPoint(new Vector3(screen.width,screen.height,0));

// Clampping the sprite within the screen
transform.position = new Vector3(
    Mathf.Clamp(transform.position.x,screenStart.position.x,screenEnd.position.x),
    Mathf.Clamp(transform.position.y,screenStart.position.y,screenEnd.position.y),
    transform.position.z);
// Getting the length and width of the sprite
Vector2 SpriteBnds = transform.GetComponent<SpriteRenderer>().bounds.size;

// checking if the sprite went beyond the screen bounds in any four directions
if(
    transform.position.y+(SpriteBnds.y/2) >=screenEnd.position.y ||
    transform.position.y - (SpriteBnds.y/2) <= screenstart.position.y ||
    transform.position.x+(SpriteBnds.x/2) >=screenEnd.position.x ||
    transform.position.x - (SpriteBnds.x/2) <= screenstart.position.x)
    {
        BallMoveOther();
    }
0
Ashok kumar 19 अक्टूबर 2019, 19:42