{"id":24225,"date":"2022-01-10T11:57:00","date_gmt":"2022-01-10T08:57:00","guid":{"rendered":"https:\/\/mobidictum.com\/?p=24225"},"modified":"2023-03-24T20:59:22","modified_gmt":"2023-03-24T17:59:22","slug":"unity-raycast-yapimi","status":"publish","type":"post","link":"https:\/\/mobidictum.com\/tr\/unity-raycast-yapimi\/","title":{"rendered":"Unity Raycast Yap\u0131m\u0131 ve Kullan\u0131m\u0131"},"content":{"rendered":"\n<p>\u0130ki nesne aras\u0131ndaki herhangi bir etkile\u015fim (bu mesafe s\u0131f\u0131r bile olsa) belirli bir mesafede ger\u00e7ekle\u015fir. Unity \u00fczerinden yapt\u0131\u011f\u0131n\u0131z oyununuzda bir nesnenin di\u011feriyle etkile\u015fime girmesi i\u00e7in etkile\u015fen nesneden etkile\u015fime girilen nesneye bir vekt\u00f6r \u00e7izmek gerekir. Bu i\u015flemi ger\u00e7ekle\u015ftirmek i\u00e7in Unity Raycasting kullan\u0131yoruz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Unity Raycasting nedir?<\/h2>\n\n\n\n<p>K\u0131saca Raycasting, se\u00e7ti\u011fimiz nesnenin ilerleyece\u011fi yolda herhangi bir engel olup olmad\u0131\u011f\u0131n\u0131 tespit etmek, e\u011fer b\u00f6yle bir engel varsa nas\u0131l bir etkile\u015fim ya\u015fanaca\u011f\u0131n\u0131 belirtmek i\u00e7in se\u00e7ili g\u00f6r\u00fcnmez bir \u0131\u015f\u0131n\u0131(ray) se\u00e7ili nesneden belirli bir y\u00f6ne \u00e7ekme i\u015flemidir. S\u00f6zgelimi, oyununuzdaki karakterin bir nesneyi vurmas\u0131n\u0131 istedi\u011finizi hayal edin. Karakter ate\u015f etti\u011finde merminin kat etti\u011fi mesafe ve yaratt\u0131\u011f\u0131 etkiyi Raycasting taraf\u0131ndan hesaplay\u0131p i\u015fleme koyars\u0131n\u0131z.<\/p>\n\n\n\n<p>Bu i\u015flem hem Unity 2D oyununuz hem de Unity 3D oyununuz i\u00e7in yap\u0131labilmektedir. \u0130ki t\u00fcr oyun i\u00e7in raycastingi iki farkl\u0131 ba\u015fl\u0131kta inceleyece\u011fiz.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\"><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Unity 3D Raycast<\/h2>\n<\/div><\/div>\n\n\n\n<p>Unity 3D Raycast temel kodunuz \u015f\u00f6yle g\u00f6z\u00fckmeli:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"939\" height=\"92\" src=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_9.jpg\" alt=\"\" class=\"wp-image-23885\" srcset=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_9.jpg 939w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_9-600x59.jpg 600w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_9-300x29.jpg 300w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_9-768x75.jpg 768w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_9-380x37.jpg 380w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_9-800x78.jpg 800w\" sizes=\"(max-width: 939px) 100vw, 939px\" \/><figcaption>Unity 3D oyununuzda Raycasting i\u00e7in temel bir kod \u00f6rne\u011fi.<\/figcaption><\/figure>\n\n\n\n<p>\u015eimdi kodu beraber inceleyim:<\/p>\n\n\n\n<p><strong>Vector3 origin<\/strong>, \u0131\u015f\u0131n\u0131n\u0131z\u0131n ba\u015flang\u0131\u00e7 \u200b\u200bnoktas\u0131n\u0131 tan\u0131mlar. Bu nokta, veri taban\u0131nda X, Y ve Z boyutlar\u0131na kar\u015f\u0131l\u0131k gelen Vector3 olarak depolan\u0131yor. Vector3, Unity 3D oyunlar\u0131na \u00f6zeldir, oyununuz \u00fc\u00e7 boyutlu oldu\u011fu i\u00e7in t\u00fcm vekt\u00f6rler Vector3\u2019te i\u015flenecektir.<\/p>\n\n\n\n<p><strong>Vector3 direction<\/strong>, \u0131\u015f\u0131n\u0131m\u0131z\u0131n y\u00f6n\u00fcn\u00fc belirler. I\u015f\u0131n\u0131m\u0131za ba\u015flang\u0131\u00e7 \u200b\u200bnoktam\u0131z\u0131n boyutundan farkl\u0131, i\u00e7inde seyahat edebilece\u011fi bir boyut veren bir Vector3\u2019t\u00fcr.<\/p>\n\n\n\n<p><strong>float distance<\/strong>, \u0131\u015f\u0131n\u0131m\u0131z\u0131n ba\u015flang\u0131\u00e7 \u200b\u200bnoktas\u0131ndan belirledi\u011fimiz y\u00f6nde bir kayan nokta de\u011feri olarak almas\u0131 gereken mesafedir.<\/p>\n\n\n\n<p><strong>int LayerMask<\/strong> zorunlu olmasa da faydal\u0131 olabilecek bir girdi. Unity 3D oyununuzda, \u0131\u015f\u0131n\u0131n\u0131z baz\u0131 belirtilen nesneleri yok sayarken di\u011ferlerine \u00e7arpabilir. Int de\u011feri atayarak, nesnenizin \u0131\u015f\u0131n boyunca ald\u0131\u011f\u0131 yolda neye \u00e7arpt\u0131\u011f\u0131nda tepki verece\u011fini belirtebilirsiniz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mouse pozisyonunuzdan Raycasting yapmak<\/h3>\n\n\n\n<p>I\u015f\u0131n\u0131m\u0131z\u0131n orjin noktas\u0131n\u0131 tan\u0131mlaman\u0131n farkl\u0131 yollar\u0131 vard\u0131r. Fare konumunu ba\u015flang\u0131\u00e7 \u200b\u200bnoktas\u0131 olarak ayarlamak da \u0131\u015f\u0131n\u0131n\u0131z\u0131n nereden geldi\u011fini belirlemenin kolay ve etkili bir yolu olabilir. Bu, \u00f6zellikle bir Unity 3D oyunu \u00fczerinde \u00e7al\u0131\u015f\u0131yorsan\u0131z size yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n\n\n\n<p>\u00d6ncelikle, fare konumunuzu Unity d\u00fcnyas\u0131na aktarabilmeniz gerekir. Fare konumumuz, <strong>input<\/strong> s\u0131n\u0131f\u0131n\u0131n bir \u00f6zelli\u011fidir. Farenizi bir orijin noktas\u0131 olarak ataman\u0131z i\u00e7in tek yapman\u0131z gereken \u015feyse <strong>Input.mousePosition<\/strong>\u2018\u0131 kullanmakt\u0131r. Olduk\u00e7a basit, de\u011fil mi?<\/p>\n\n\n\n<p>Karakterinizin ate\u015f etmesini istedi\u011finiz senaryo \u00f6rne\u011finden devam edelim. Kameradan\/g\u00f6stergeden bir \u0131\u015f\u0131n yaratmak i\u00e7in \u00f6rnek kodu a\u015fa\u011f\u0131ya b\u0131rak\u0131yorum:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"553\" src=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-1024x553.png\" alt=\"\" class=\"wp-image-23875\" srcset=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-1024x553.png 1024w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-600x324.png 600w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-300x162.png 300w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-768x414.png 768w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-1536x829.png 1536w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-2048x1105.png 2048w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-380x205.png 380w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-800x432.png 800w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Ekran-Resmi-2021-12-29-22.40.53-1160x626.png 1160w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Fare konumu yard\u0131m\u0131yla Raycasting yapmak olduk\u00e7a kolay!<\/figcaption><\/figure>\n\n\n\n<p>Merak etmeyin,her \u015feyi a\u00e7\u0131klayaca\u011f\u0131m. Kodun i\u00e7ine size yol g\u00f6stermesi i\u00e7in yorumlar ekledim. Yine de gelin, kodun \u00fczerinden tek tek ge\u00e7elim.<\/p>\n\n\n\n<p><strong>camera = Camera.main<\/strong>, ana kamera de\u011fi\u015fkeninizi tan\u0131mlar. <strong>if (Input.GetButton(\u201cFire1\u201d))<\/strong> k\u0131sm\u0131, karakterinizin ate\u015f etmesi i\u00e7in \u201cFire\u201d d\u00fc\u011fmesine bast\u0131\u011f\u0131n\u0131zda \u0131\u015f\u0131n\u0131n\u0131z\u0131 tetikleyen -evet, \u00f6zellikle yapt\u0131m- bir <strong>if<\/strong> i\u015flevi tan\u0131ml\u0131yor. <strong>MoveWithRay()<\/strong>, \u0131\u015f\u0131n\u0131n\u0131z\u0131n hareketini temsil eden bir girdi.<\/p>\n\n\n\n<p><strong>Input.mousePosition<\/strong>, \u00fc\u00e7 boyutlu bir evrende \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z i\u00e7in <strong>Vector3<\/strong> olarak tan\u0131mlanacakt\u0131r. Yukar\u0131da bahsetmi\u015ftim.<\/p>\n\n\n\n<p>Biraz derinlik eklemek i\u00e7in <strong>camera.transform.position.z<\/strong>\u2018yi <strong>mousePos.z<\/strong> olarak tan\u0131mlad\u0131m.<\/p>\n\n\n\n<p>Buradaki p\u00fcf nokta<strong> Ray ray= camera.ScreenPointToRay(mousePos)) <\/strong>kodu. <strong>ScreenPointToRay<\/strong> sayesinde \u0131\u015f\u0131n\u0131n\u0131z\u0131 kolayca olu\u015fturacaks\u0131n\u0131z. Esasen bu, kamera\/mouse imlecinden \u0131\u015f\u0131n g\u00f6ndermemizi sa\u011flayan kod.<\/p>\n\n\n\n<p><strong>RaycastHit<\/strong>, \u0131\u015f\u0131n\u0131m\u0131z yolda bir \u015feyle \u00e7arp\u0131\u015ft\u0131\u011f\u0131nda nas\u0131l bir etki yarataca\u011f\u0131n\u0131 tan\u0131mlar.<\/p>\n\n\n\n<p><strong>if (Physics.Raycast(ray,out hit,100))<\/strong>\u2018i izleyen<strong> if<\/strong> i\u015flevi, \u0131\u015f\u0131n\u0131m\u0131z\u0131n 100 mesafesinde (bir \u00f6rnek olarak 100 koydum) bir \u015feye \u00e7arp\u0131p \u00e7arpmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/p>\n\n\n\n<p>if ko\u015fulu sa\u011flan\u0131yorsa, kod \u015f\u00f6yle akmaya devam eder:<\/p>\n\n\n\n<p><strong>Vector3 move = hitpoint<\/strong>; (\u0130sabet noktas\u0131n\u0131 de\u011fi\u015ftiremedi\u011fim i\u00e7in yeni bir de\u011fi\u015fken tan\u0131mlad\u0131m)<\/p>\n\n\n\n<p><strong>move.y = transformation.position.y;<\/strong> (I\u015f\u0131n\u0131m\u0131z\u0131n Y boyutunda seyahat etmesini istemiyorum)\r\n<strong>move.z = transformation.position.z<\/strong>;(I\u015f\u0131n\u0131m\u0131z\u0131n Z boyutunda seyahat etmesini istemiyorum.)\r\ntransform.position = <strong>transform.position = Vector3.MoveTowards(transform.position, move, speed)<\/strong> (nesneyi hareket ettirmek i\u00e7in hareket ve h\u0131z de\u011fi\u015fkenlerini tan\u0131mlay\u0131n)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Unity 2D Raycast<\/h2>\n\n\n\n<p>Unity 2D oyununuz i\u00e7in bir \u0131\u015f\u0131n tan\u0131mlarken, yaz\u0131mda baz\u0131 n\u00fcans farklar\u0131 da olsa, Unity 3D oyunu i\u00e7in yapt\u0131\u011f\u0131m\u0131za benzer \u015feyler yap\u0131yoruz:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-1024x47.jpg\" alt=\"unity raycast 2d kodu\" class=\"wp-image-23687\" width=\"700\" height=\"32\" srcset=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-1024x47.jpg 1024w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-600x28.jpg 600w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-300x14.jpg 300w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-768x35.jpg 768w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-1536x71.jpg 1536w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-380x18.jpg 380w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-800x37.jpg 800w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7-1160x54.jpg 1160w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/Screenshot_7.jpg 1906w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption>Unity 2D i\u00e7in raycasting yapmak Unity 3D i\u00e7in yapmaya olduk\u00e7a benziyor.<\/figcaption><\/figure>\n\n\n\n<p><strong>Vector2 origin<\/strong>, \u0131\u015f\u0131n\u0131n\u0131z\u0131n ba\u015flang\u0131\u00e7 \u200b\u200bnoktas\u0131n\u0131 tan\u0131mlar. Bu nokta, X ve Y konumlar\u0131 ile bir <strong>Vector2<\/strong> olarak saklan\u0131r. Bu kod Unity 2D oyunlar\u0131na \u00f6zeldir, oyununuzun iki boyutu nedeniyle t\u00fcm vekt\u00f6rler Vector2\u2019de i\u015flenecektir.<\/p>\n\n\n\n<p><strong>Vector2 direction<\/strong> , \u0131\u015f\u0131n\u0131m\u0131z\u0131n y\u00f6n\u00fcn\u00fc belirler. I\u015f\u0131n\u0131m\u0131za, ba\u015flang\u0131\u00e7 \u200b\u200bnoktam\u0131z\u0131n boyutundan farkl\u0131, i\u00e7inde seyahat edebilece\u011fi bir boyut veren Vector2 oluyor.<\/p>\n\n\n\n<p><strong>float distance<\/strong>, \u0131\u015f\u0131n\u0131m\u0131z\u0131n ba\u015flang\u0131\u00e7 \u200b\u200bnoktas\u0131ndan belirledi\u011fimiz y\u00f6nde bir kayan nokta de\u011feri olarak almas\u0131 gereken mesafedir.<\/p>\n\n\n\n<p><strong>int LayerMask<\/strong> zorunlu olmasa da faydal\u0131 olabilecek bir girdi. Unity 2D oyununuzda, \u0131\u015f\u0131n\u0131n\u0131z baz\u0131 belirtilen nesneleri yok sayarken di\u011ferlerine \u00e7arpabilir. Int de\u011feri atayarak, nesnenizin \u0131\u015f\u0131n boyunca ald\u0131\u011f\u0131 yolda neye \u00e7arpt\u0131\u011f\u0131nda tepki verece\u011fini belirtebilirsiniz.<\/p>\n\n\n\n<p>Bu kod 2D \u0131\u015f\u0131n\u0131n\u0131z\u0131 manuel olarak yazmak i\u00e7indi.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/unity-2D-raycast.png\" alt=\"\" class=\"wp-image-23889\" width=\"703\" height=\"280\" title=\"raycasting-for-2d-games-in-unity-explained\" srcset=\"https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/unity-2D-raycast.png 512w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/unity-2D-raycast-300x120.png 300w, https:\/\/mobidictum.com\/wp-content\/uploads\/2021\/12\/unity-2D-raycast-380x151.png 380w\" sizes=\"(max-width: 703px) 100vw, 703px\" \/><figcaption>Kodunuzu yazarken \u0131\u015f\u0131n\u0131n\u0131z\u0131n yol \u00fczerinde \u00e7arp\u0131\u015ft\u0131\u011f\u0131 nesnelere dikkat edin.<\/figcaption><\/figure>\n\n\n\n<p>Bu komut dosyas\u0131nda, \u0131\u015f\u0131n\u0131m\u0131 otomatik olarak olu\u015fturdum. I\u015f\u0131n\u0131n\u0131z\u0131 her iki \u015fekilde de yazabilirsiniz. Yukar\u0131daki kodun \u00f6zelliklerinden bahsedelim:<\/p>\n\n\n\n<p><strong>Create2DRay()<\/strong>, fonksiyonu i\u00e7e aktarman\u0131za yarar.\r\n<strong>private void Create2DRay()<\/strong>\r\n\r\n<strong>RaycastHit2D hit= Physics2D.Raycast(transform.position, transform.right, 100)<\/strong>\r\n\u0131\u015f\u0131n\u0131m\u0131z\u0131n 100 uzakl\u0131k de\u011feri ile <em>sa\u011fa<\/em> gitmesini sa\u011flar(soldan sa\u011fa ate\u015f etti\u011fimi varsay\u0131yorum).\r\n\r\n<strong>if (hit.collider != null)<\/strong> \u0131\u015f\u0131n\u0131m\u0131z\u0131n yolda herhangi bir \u015feyle \u00e7arp\u0131\u015f\u0131p \u00e7arp\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/p>\n\n\n\n<p>I\u015f\u0131n\u0131m\u0131z\u0131n \u00e7arpt\u0131\u011f\u0131 GameObject\u2019in ad\u0131n\u0131 yazd\u0131r\u0131yoruz \u015f\u00f6yle kodlad\u0131m: <strong>Debug.Log(hit.collider.gameObject.name)<\/strong><\/p>\n\n\n\n<p>Umar\u0131m bu k\u0131lavuz, Unity 2D veya Unity 3D oyununuzda raycast yapman\u0131za yard\u0131mc\u0131 olur.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>2D ve 3D oyunlar i\u00e7in Unity&#8217;de Raycasting&#8217;e giri\u015f.<\/p>\n","protected":false},"author":56,"featured_media":24972,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[8875,8860],"tags":[],"class_list":["post-24225","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-akademi","category-news-mobidictum"],"acf":[],"_links":{"self":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/24225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/users\/56"}],"replies":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/comments?post=24225"}],"version-history":[{"count":1,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/24225\/revisions"}],"predecessor-version":[{"id":152215,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/24225\/revisions\/152215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/media\/24972"}],"wp:attachment":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/media?parent=24225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/categories?post=24225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/tags?post=24225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}