如何更改相同标签的游戏对象位置

问题描述 投票:0回答:0

我正在用Unity做这么简单的手机游戏。我正在尝试更改砖块的位置(命名标签:tugla)。我的目的是当我的砖块被球击中时会更新新的位置。当我的球碰到地板时。不撞砖就没有问题。但是,当我碰到第二块或其他一些砖块时。我的积木不会定位。另外,当我的球碰到砖头时。砖将被摧毁。例如;我的游戏中有 4 块积木。我打了第二个。但是只有第三块和第四块砖得到了新的位置。我该如何解决?

我的积木代码:

public class tugla : MonoBehaviour
{

    public static int toplamTuglaSayisi;
    public Sprite[] tuglaSprite;
    private int maxCarpmaSayisi;
    private int carpmaSayisi;
    GameObject kirmizitop;



    // Start is called before the first frame update
    void Start()
    {
        maxCarpmaSayisi = tuglaSprite.Length + 1;
        toplamTuglaSayisi++;
        kirmizitop = GameObject.FindGameObjectWithTag("kirmizitop");


    }

    // Update is called once per frame
    void Update()
    {
        // -1.330 -1.868
    }



    private void OnTriggerEnter2D(Collider2D collision)
    {


        // İçinden kırmızı top geçince objeyi yok eder.


        Debug.Log("kirmizi top geçti");
       
            carpmaSayisi++;
            if (carpmaSayisi >= maxCarpmaSayisi)
            {
                toplamTuglaSayisi--;

                // Tugla bittiğini gösterir.
                if (toplamTuglaSayisi <= 0)
                {
                    Debug.Log("works");
                    // Oyun Yoneticisinin içerisindeki yazdığımız fonksiyonu çağırıyoruz.Bir sonraki sahneye geçiyoruz.
                    GameObject.FindObjectOfType<OyunKontrol>().GetComponent<OyunKontrol>().birsonrakisahne();
                }


                // çarptıgında destroy ediyor.
                Destroy(gameObject);
            }else
        {
            GetComponent<SpriteRenderer>().sprite = tuglaSprite[carpmaSayisi - 1];

        }
       
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {

       

        if (collision.gameObject.name.Equals("top"))
        {
         
          
            carpmaSayisi++;
            if (carpmaSayisi >= maxCarpmaSayisi)
            {
                toplamTuglaSayisi--;

                // Tugla bittiğini gösterir.
                if(toplamTuglaSayisi <= 0)
                {
                    Debug.Log("works");
                    // Oyun Yoneticisinin içerisindeki yazdığımız fonksiyonu çağırıyoruz.Bir sonraki sahneye geçiyoruz.
                    GameObject.FindObjectOfType<OyunKontrol>().GetComponent<OyunKontrol>().birsonrakisahne();
                }


                // çarptıgında destroy ediyor.
                Destroy(gameObject);
            }else
            {
                GetComponent<SpriteRenderer>().sprite = tuglaSprite[carpmaSayisi - 1];

            }
        }
        else
        {

          

        } 
       
    }

我的球代码:

public class top : MonoBehaviour
{
    GameObject topataci;
    Rigidbody2D fizik;
    GameObject acigostergesi;
    GameObject[] tugla;

    public GameObject top_arka;
    // Start is called before the first frame update
    void Start()
    {
        fizik = GetComponent<Rigidbody2D>();
        topataci = GameObject.FindGameObjectWithTag("topataci");
        acigostergesi = GameObject.FindGameObjectWithTag("acigostergesi");
        tugla = GameObject.FindGameObjectsWithTag("tugla");
        
    }

    // Update is called once per frame
    void Update()
    {
        
        //if (Input.GetMouseButton(0))
        //{
        //    // Topa kuvvet uygulamaya yarar.
        ////    GetComponent<Rigidbody2D>().velocity = new Vector2(10f, 20f);
        //}


        //if (Input.GetMouseButtonUp(0))
        //{

        //    for (int i = 0; i < 3; i++)
        //    {

             

        //   //     Instantiate(top_arka, transform.position, transform.rotation);
        //     //   yield return new WaitForSeconds(.1f);
        //        // SpawnIfNull();
        //        // top_arka.GetComponent<Rigidbody2D>().velocity = new Vector2(20f, 20f);
        //    }
        //}
           
    }



    void OnCollisionEnter2D(Collision2D Collider)
    {
        



        if (Collider.gameObject.name.Equals("zemin"))
        {

         //   Debug.Log("Hit!!!");

           //   fizik.MovePosition(fizik.position);



            // Topun kuvvetini sıfırlamaya yarar.
          GetComponent<Rigidbody2D>().velocity = new Vector2(0f, 0f);

            // Zemine gelince pedallin yerini sıfırla.
            topataci.GetComponent<Transform>().transform.position   = new Vector3(0, -6.04f, 0);


            // acigöstergesininin yerini ayarla

            acigostergesi.GetComponent<Transform>().transform.position = new Vector3(transform.position.x, transform.position.y, 10f);

            // Zemine gelince acigostergesinin açısını sıfırladım.
            acigostergesi.GetComponent<Rigidbody2D>().rotation = 0;

            // tuglalara yeni position ekle.

          

            if (tugla.Length <= 0)
            {

             
              
            
               // SceneManager.LoadScene(1);
            }
            else
            {

                for (int i = 0; i < tugla.Length; i++)
                {

                    Debug.Log("Getting new position");
                    tugla[i].GetComponent<Transform>().transform.position += Vector3.down * 0.538f;
                }

            }


           // tugla.GetComponent<Transform>().transform.position += Vector3.down * 0.538f;

            //new Vector3(tugla.transform.position.x , tugla.transform.position * 0.538f , )



           




        }







    }
c# visual-studio unity3d
© www.soinside.com 2019 - 2024. All rights reserved.