Soru & Cevap

Unity hareket hatasi.

15.07.2017 - 11:03

-Merhaba hocam benim şöyle bir sorum var. Unity de bir proje yapıyorum be bu projede 4 önde ve 4 arkada olmak üzere 8tane boş noktam var bu noktalardan arkadaki 4 tanesinin transform. positionunda yanı üstünde 4 adet nesnem benim istediğim bu nesnelerin herhangi birine tıklandığında o tilladıgım objenin karşındakinin noktaya hareket etmesi. -Yani kullanıcı nesneye tıkladıgında o nesnenin kendi karşındakinin noktaya hareket edecek. Ben şöyle bir kod yazdım ama hatalı oldu. Hata ise şu, her nesne tek bir noktada toplanıyor. Yani tıklanan her obje aynı noktaya gidiyor. Yazdıgım kod ise şuydu - -public Transform [ ] nokta1; -public Transform [ ] nokta2; -public int sayı; -int hız; -Void OnMouseDown ( ) { -İf (Transform. position==nokta1 [sayı].position ) { sayı=0; -Transform. position=Vector3. MoveTowards (Transform. position,nokta2[0] position,hız*time.deltaTime ); } -İf (Transform. position==nokta1 [sayı].position ) { sayı=1; -Transform. position=Vector3. MoveTowards (Transform. position,nokta2[1] position,hız*time.deltaTime ); } -İf (Transform. position==nokta1 [sayı].position ) { sayı=2; -Transform. position=Vector3. MoveTowards (Transform. position,nokta2[2] position,hız*time.deltaTime ); } -İf (Transform. position==nokta1 [sayı].position ) { sayı=3; -Transform. position=Vector3. MoveTowards (Transform. position,nokta2[3] position,hız*time.deltaTime ); } } -Bu scripteki yanlışa bakarmısınız? Objelere tıklandığında kendi karşısındaki noktaya gitmesi gerekiyordu ama her birine tıklandığında tek noktada toplanıyorlar.

64 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user yetkin
yetkin
16.07.2017 - 07:55
Teşekkürler hocam.
Profile picture for user playablegraphs
playablegraphs
16.07.2017 - 12:03

Merhabalar Can,

Öncelikle transform.position field'ı sana script'in ekli(attached) olduğu oyun objesinin (GameObject) posizyonunu döndürür. Sana lazım olan değer mouse pozisyonu. Input.mousePosition field'ı sana o frame'deki mouse'un pozisyonunu döndürecektir. Mouse pozisyonunu world pozisyonuna çevirmelisin ama mouse pozisyonunu objenin pozisyonuyla doğrudan karşılaştırmak yerine arasındaki farkı karşılaştırmak daha sağlık sonuç verir.


if(Camera.main.ScreenToWorldPoint(Input.mousePosition) == nokta1[sayi].position)

yerine

// Eğer oyun dünyası koordinat sisteminde mouse pozisyonu ile noktanın arasındaki fark  0.1f'ten küçükse
if( 0.1f > Vector3.Distance(Camera.main.ScreenToWorldPoint(Input.mousePosition), nokta1[sayi].position))

Bunun ötesinde önerim cartesian coordinate sistemlerine çalışman. O zaman her şey daha da netleşecektir iyi çalışmalar.