{"id":18954,"date":"2022-01-16T22:30:15","date_gmt":"2022-01-16T19:30:15","guid":{"rendered":"https:\/\/mobidictum.com\/?p=18954"},"modified":"2023-04-25T10:48:24","modified_gmt":"2023-04-25T07:48:24","slug":"unity-zamanlayici-olusturma-time-deltatime","status":"publish","type":"post","link":"https:\/\/mobidictum.com\/tr\/unity-zamanlayici-olusturma-time-deltatime\/","title":{"rendered":"Unity\u2019de Zamanlay\u0131c\u0131 Olu\u015fturma: Time.deltaTime"},"content":{"rendered":"\n<p><a href=\"https:\/\/mobidictum.com\/tr\/unity-nedir-unity-icin-sistem-gereksinimleri-nelerdir\/\" data-type=\"post\" data-id=\"8294\">Unity<\/a>\u2018de temel bir geri say\u0131m sayac\u0131 yapma y\u00f6ntemi g\u00f6r\u00fcnd\u00fc\u011f\u00fcnden daha basittir.<\/p>\n\n\n\n<p>Kalan s\u00fcreyi hesaplamak i\u00e7in bir kayan nokta de\u011fi\u015fkeni olu\u015fturun ve her karede \u00f6nceki karenin s\u00fcresini (delta s\u00fcresi) bu miktardan \u00e7\u0131kar\u0131n. \u00d6rne\u011fin:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>using System.Collections;<\/p><p>using System.Collections.Generic;<\/p><p>using UnityEngine;<\/p><p>public class Timer : MonoBehaviour<\/p><p>{<\/p><p>\u00a0\u00a0\u00a0 public float timeRemaining = 10;<\/p><p>\u00a0\u00a0\u00a0 void Update()<\/p><p>\u00a0\u00a0\u00a0 {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (timeRemaining > 0)<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 timeRemaining -= Time.deltaTime;<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/p><p>\u00a0\u00a0\u00a0 }<\/p><p>}<\/p><\/blockquote>\n\n\n\n<p>Unity\u2019de bir zamanlay\u0131c\u0131 olu\u015fturman\u0131n temel y\u00f6ntemi budur.<\/p>\n\n\n\n<p>Geri say\u0131m s\u00fcresini ne kadar belirledi\u011finize g\u00f6re zamanlay\u0131c\u0131 \u00e7al\u0131\u015facakt\u0131r.<\/p>\n\n\n\n<p>Muhtemelen bir geri say\u0131m sayac\u0131 yap\u0131yorsan\u0131z, zamanlay\u0131c\u0131 s\u0131f\u0131ra ula\u015ft\u0131\u011f\u0131nda bir \u015feylerin olmas\u0131n\u0131 sa\u011flamak isteyebilirsiniz.<\/p>\n\n\n\n<p><strong>Geri say\u0131m bitti\u011finde bir eylem nas\u0131l tetiklenir<\/strong><\/p>\n\n\n\n<p>\u00d6nceki \u00f6rnekte, zamanlay\u0131c\u0131n\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 belirli bir s\u00fcre belirleyerek anlam\u0131\u015ft\u0131k.<\/p>\n\n\n\n<p>Peki ya zamanlay\u0131c\u0131 bitti\u011finde bir eylemi tetiklemek isterseniz ne yapman\u0131z gerekiyor?<\/p>\n\n\n\n<p>\u00d6rne\u011fin, oyunu bitirmek veya zaman g\u00f6stergesini ayarlamak vb. isteyebilirsiniz. Sonunda hi\u00e7bir \u015fey olmazsa geri say\u0131m yapman\u0131n pek bir anlam\u0131 kalm\u0131yor. Bunu yapman\u0131n en kolay yolu, else ko\u015fuludur. \u00d6rne\u011fin:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>if (timeRemaining > 0)<\/p><p>{<\/p><p>\u00a0\u00a0\u00a0 timeRemaining -= Time.deltaTime;<\/p><p>}<\/p><p>else<\/p><p>{<\/p><p>\u00a0\u00a0\u00a0 Debug.Log(\u201cTime has run out!\u201d);<\/p><p>}<\/p><\/blockquote>\n\n\n\n<p>Bu y\u00f6ntemin tek bir sorunu var. Zamanlay\u0131c\u0131 biter bitmez, else ko\u015fulu her karede \u201cdo\u011fru\u201d olmaya devam etmekte.<\/p>\n\n\n\n<p>Bu, zamanlay\u0131c\u0131 s\u0131f\u0131ra ula\u015ft\u0131\u011f\u0131nda tetiklenen herhangi bir eylemin daha sonra her karede de tetiklenece\u011fi anlam\u0131na gelir. Yani s\u00fcrekli olarak ayn\u0131 eylemi tekrarlayaca\u011f\u0131 anlam\u0131na geliyor.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>using System.Collections;<\/p><p>using System.Collections.Generic;<\/p><p>using UnityEngine;<\/p><p>public class Timer : MonoBehaviour<\/p><p>{<\/p><p>\u00a0\u00a0\u00a0 public float timeRemaining = 10;<\/p><p>\u00a0\u00a0\u00a0 public bool timerIsRunning = false;<\/p><p>\u00a0\u00a0\u00a0 private void Start()<\/p><p>\u00a0\u00a0\u00a0 {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Starts the timer automatically<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 timerIsRunning = true;<\/p><p>\u00a0\u00a0\u00a0 }<\/p><p>\u00a0\u00a0\u00a0 void Update()<\/p><p>\u00a0\u00a0\u00a0 {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (timerIsRunning)<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (timeRemaining > 0)<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 timeRemaining -= Time.deltaTime;<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Debug.Log(\u201cTime has run out!\u201d);<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 timeRemaining = 0;<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 timerIsRunning = false;<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/p><p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/p><p>\u00a0\u00a0\u00a0 }<\/p><p>}<\/p><\/blockquote>\n\n\n\n<p>Yukar\u0131da g\u00f6sterdi\u011fim \u00f6rnek daha kullan\u0131\u015fl\u0131, \u00e7\u00fcnk\u00fc zamanlay\u0131c\u0131n\u0131n ne zaman ba\u015flayaca\u011f\u0131n\u0131 manuel olarak kontrol etmenize olanak tan\u0131yor (timerIsRunning\u2019i true olarak ayarlayarak).<\/p>\n\n\n\n<p>Ayr\u0131ca, zamanlay\u0131c\u0131 s\u0131f\u0131ra ula\u015ft\u0131\u011f\u0131nda tetiklenen son eylemin yaln\u0131zca bir kez tetiklendi\u011fi anlam\u0131na da geliyor.<\/p>\n\n\n\n<p><strong>Bitti\u011finde zamanlay\u0131c\u0131y\u0131 s\u0131f\u0131ra kitlemeyi unutmay\u0131n<\/strong><\/p>\n\n\n\n<p>Ayr\u0131ca, zamanlay\u0131c\u0131 sona erdi\u011finde timeRemaining\u2019i manuel olarak s\u0131f\u0131ra ayarlad\u0131\u011f\u0131m\u0131 fark edebilirsiniz.<\/p>\n\n\n\n<p>Bunun nedeni, zamanlay\u0131c\u0131 durdu\u011funda kalan s\u00fcrenin neredeyse her zaman negatif bir say\u0131 olaca\u011f\u0131d\u0131r. Bunun nedeni, zaman\u0131n, son karenin s\u00fcresine e\u015fde\u011fer olan par\u00e7alar halinde \u00e7\u0131kar\u0131lmas\u0131d\u0131r.<\/p>\n\n\n\n<p>Zamanlay\u0131c\u0131 bitti\u011finde s\u0131f\u0131ra ayarlanmal\u0131 \u00e7\u00fcnk\u00fc \u015fu anda bir sorun olmasa da daha sonra zaman de\u011ferini g\u00f6r\u00fcnt\u00fclerken sorun yaratabilir.<\/p>\n\n\n\n<p>Bu da bizi bir sonraki soruna getiriyor.<\/p>\n\n\n\n<p>Bir \u015famand\u0131ray\u0131 dakika ve saniye cinsinden g\u00f6r\u00fcnt\u00fclenen bir zaman de\u011ferine nas\u0131l d\u00f6n\u00fc\u015ft\u00fcr\u00fcrs\u00fcn\u00fcz?<\/p>\n\n\n\n<p><strong>Unity\u2019de bir zaman de\u011feri dakika ve saniyeye nas\u0131l \u00e7evrilir<\/strong><\/p>\n\n\n\n<p>Basit bir g\u00f6rev gibi g\u00f6r\u00fcn\u00fcyor, ancak Unity\u2019de dakika ve saniye cinsinden bir zaman de\u011feri g\u00f6r\u00fcnt\u00fclemek \u015fa\u015f\u0131rt\u0131c\u0131 derecede zor olabilir.<\/p>\n\n\n\n<p>Bunun nedeni, bunu yapman\u0131n bir\u00e7ok yolu olmas\u0131d\u0131.<\/p>\n\n\n\n<p>Bu y\u00f6ntem \u00e7ok kullan\u0131\u015fl\u0131, \u00e7\u00fcnk\u00fc zaman\u0131 do\u011fru g\u00f6r\u00fcnt\u00fclerken kar\u015f\u0131la\u015fabilece\u011finiz yayg\u0131n sorunlar\u0131n \u00e7o\u011funu yaln\u0131zca birka\u00e7 ad\u0131mda \u00f6nlememizi sa\u011fl\u0131yor.<\/p>\n\n\n\n<p>Zaman\u0131 do\u011fru bir \u015fekilde g\u00f6r\u00fcnt\u00fclemek i\u00e7in, hem dakika hem de saniye, ham zaman de\u011ferinden ayr\u0131 ayr\u0131 hesaplanmal\u0131d\u0131r.<\/p>\n\n\n\n<p>Dakikalar\u0131 hesaplamak i\u00e7in kalan s\u00fcreyi 60\u2019a b\u00f6l\u00fcn, \u00f6rne\u011fin:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>float minutes = Mathf.FloorToInt(timeRemaining \/ 60);<\/p><\/blockquote>\n\n\n\n<p>Saniyeyi hesaplamak i\u00e7in modulo i\u015flemini (%) bu \u015fekilde kullan\u0131n.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>float seconds = Mathf.FloorToInt(timeRemaining % 60);<\/p><\/blockquote>\n\n\n\n<p><strong>Modulo i\u015flemi nedir?<\/strong><\/p>\n\n\n\n<p>Modulo i\u015flemi, bir say\u0131n\u0131n di\u011ferine b\u00f6l\u00fcnmesinden sonra kalan\u0131n\u0131 d\u00f6n\u00fc\u015ft\u00fcren bir hesaplama i\u015flevidir.<\/p>\n\n\n\n<p>Bu \u00f6rnekte modulo, bir tam dakikay\u0131 olu\u015fturmayan toplam zaman de\u011ferinden saniye say\u0131s\u0131n\u0131 d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n\n\n\n<p>Bir zaman g\u00f6stergesinin sadece saniyelerini almak i\u00e7in m\u00fckemmel y\u00f6ntemlerden biridir.<\/p>\n\n\n\n<p>Sonu\u00e7lar\u0131n de\u011feri de\u011fi\u015fken olaca\u011f\u0131ndan dolay\u0131 en b\u00fcy\u00fck tamsay\u0131 de\u011ferine yuvarlamak i\u00e7in Mathf.FloorToInt kullanmal\u0131s\u0131n\u0131z.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unity&#8217;de timer olu\u015fturmay\u0131 anlatt\u0131k.<\/p>\n","protected":false},"author":54,"featured_media":24985,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[8875],"tags":[],"class_list":["post-18954","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-akademi"],"acf":[],"_links":{"self":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/18954","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\/54"}],"replies":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/comments?post=18954"}],"version-history":[{"count":1,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/18954\/revisions"}],"predecessor-version":[{"id":152210,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/posts\/18954\/revisions\/152210"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/media\/24985"}],"wp:attachment":[{"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/media?parent=18954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/categories?post=18954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mobidictum.com\/tr\/wp-json\/wp\/v2\/tags?post=18954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}