我正在用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 , )
}
}