[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:game-dev\u002Fgp-character-controller-movement":4,"config":233},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":130,"samples":147},"game-dev","Oyun Geliştirme","","gp-character-controller-movement","Gp Character Controller Movement","tr",75,2850,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127],{"key":19,"name":20,"count":11},"game-ai-pathfinding","Game Ai Pathfinding",{"key":22,"name":23,"count":11},"game-input-audio","Game Input Audio",{"key":25,"name":26,"count":11},"game-loop-fundamentals","Game Loop Fundamentals",{"key":28,"name":29,"count":11},"game-networking-multiplayer","Game Networking Multiplayer",{"key":31,"name":32,"count":11},"game-performance-optimization","Game Performance Optimization",{"key":34,"name":35,"count":11},"game-physics-collision","Game Physics Collision",{"key":37,"name":38,"count":11},"game-rendering-pipeline","Game Rendering Pipeline",{"key":40,"name":41,"count":11},"game-state-management","Game State Management",{"key":43,"name":44,"count":11},"gfx-forward-deferred-architectures","Gfx Forward Deferred Architectures",{"key":46,"name":47,"count":11},"gfx-gpu-pipeline-stages","Gfx Gpu Pipeline Stages",{"key":49,"name":50,"count":11},"gfx-post-processing-aa-hdr","Gfx Post Processing Aa Hdr",{"key":52,"name":53,"count":11},"gfx-shading-lighting-pbr","Gfx Shading Lighting Pbr",{"key":55,"name":56,"count":11},"gfx-shadows-depth-precision","Gfx Shadows Depth Precision",{"key":58,"name":59,"count":11},"gfx-textures-sampling-compression","Gfx Textures Sampling Compression",{"key":61,"name":62,"count":11},"gp-ability-cooldown-damage","Gp Ability Cooldown Damage",{"key":64,"name":65,"count":11},"gp-animation-state-locomotion","Gp Animation State Locomotion",{"key":67,"name":68,"count":11},"gp-camera-follow-targeting","Gp Camera Follow Targeting",{"key":8,"name":9,"count":11},{"key":71,"name":72,"count":11},"gp-frame-windows-game-feel","Gp Frame Windows Game Feel",{"key":74,"name":75,"count":11},"gp-interaction-detection-triggers","Gp Interaction Detection Triggers",{"key":77,"name":78,"count":11},"nc-rollback-determinism","Nc Rollback Determinism",{"key":80,"name":81,"count":11},"nc-security-protocol","Nc Security Protocol",{"key":83,"name":84,"count":11},"nc-serialization-bandwidth","Nc Serialization Bandwidth",{"key":86,"name":87,"count":11},"nc-time-sync-tick","Nc Time Sync Tick",{"key":89,"name":90,"count":11},"nc-topology-nat-relay","Nc Topology Nat Relay",{"key":92,"name":93,"count":11},"nc-transport-reliability","Nc Transport Reliability",{"key":95,"name":96,"count":11},"ue-actor-component-lifecycle","Ue Actor Component Lifecycle",{"key":98,"name":99,"count":11},"ue-blueprint-cpp-interop","Ue Blueprint Cpp Interop",{"key":101,"name":102,"count":11},"ue-containers-strings-memory","Ue Containers Strings Memory",{"key":104,"name":105,"count":11},"ue-gameplay-framework-classes","Ue Gameplay Framework Classes",{"key":107,"name":108,"count":11},"ue-modules-build-packaging","Ue Modules Build Packaging",{"key":110,"name":111,"count":11},"ue-uobject-reflection-gc","Ue Uobject Reflection Gc",{"key":113,"name":114,"count":11},"un-csharp-memory-gc-performance","Un Csharp Memory Gc Performance",{"key":116,"name":117,"count":11},"un-gameobject-component-transform","Un Gameobject Component Transform",{"key":119,"name":120,"count":11},"un-jobs-burst-dots-basics","Un Jobs Burst Dots Basics",{"key":122,"name":123,"count":11},"un-monobehaviour-lifecycle-execution-order","Un Monobehaviour Lifecycle Execution Order",{"key":125,"name":126,"count":11},"un-prefabs-instantiate-pooling-addressables","Un Prefabs Instantiate Pooling Addressables",{"key":128,"name":129,"count":11},"un-scriptableobject-serialization","Un Scriptableobject Serialization",[131,135,138,141,144],{"key":132,"name":133,"count":134},"gameplay","Gameplay",450,{"key":136,"name":137,"count":134},"graphics-rendering","Graphics \u002F Rendering",{"key":139,"name":140,"count":134},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":142,"name":143,"count":134},"unity-csharp","Unity (C#)",{"key":145,"name":146,"count":134},"unreal-cpp","Unreal (C++)",[148,166,180,193,207,220],{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":160,"explanation":165},"01a034ec-0cb6-735c-b162-a2ca04d9f9e7",1,"Bir karakter kontrolcüsü genelde her adımda tabanından aşağı doğru kısa bir sorgu (ray ya da küçük bir süpürme) atarak zeminde olup olmadığını kontrol eder. Ortaya çıkan çarpmanın yüzey normali kontrolcünün neyi hesaplamasını sağlar?",[153,156,159,162],{"key":154,"text":155},"a","Yüzeyin sürtünme katsayısını",{"key":157,"text":158},"b","Bir sonraki engele olan mesafeyi",{"key":160,"text":161},"c","Yüzeyin eğim açısını",{"key":163,"text":164},"d","Yüzey nesnesinin kütlesini","Çarpma normali dünya-yukarı vektörüyle karşılaştırılır (ikisinin nokta çarpımının kosinüsü olan açı) ve bu, yüzeyin eğim açısını verir; bu açı yürünebilir\u002Fyürünemez ve kayma kararlarını besler. (a) ayrı bir malzeme sorgusu gerektirir, geometriden gelmez. (b) bir mesafedir, normalin taşıdığı bir bilgi değildir. (d) normalin taşımadığı bir fiziksel kütle bilgisi gerektirir.",{"id":167,"topic":9,"difficulty":168,"body":169,"options":170,"correct_key":157,"explanation":179},"01a034ec-0ccb-7cf6-9534-b70d7e0b65fa",3,"Bir kontrolcünün zemin kontrolü, karakterin ayaklarından aşağı doğru sabit kısa uzunlukta düz bir ray kullanıyor. Karakter dik bir rampadan hızla inerken test ekibi, karakter rampadan hiç ayrılmadığı halde kısa ve tekrarlayan 'havada' titremeleri bildiriyor. En olası neden nedir?",[171,173,175,177],{"key":154,"text":172},"Rampa çarpışma mesh'indeki üçgenler arası boşluklar",{"key":157,"text":174},"Rayın sabit uzunluğunun aşağı eğimde yetişememesi",{"key":160,"text":176},"Rayın aşağı yerine yukarı doğru atılması",{"key":163,"text":178},"İleri hızın fizik adımının sınırını aşması","Aşağı eğimli bir yüzeyde, aynı ileri mesafe için yüzey düz zemine göre daha hızlı düşer; bu yüzden düz zemin için ayarlanmış bir ray uzunluğu her adımda rampa yüzeyinin üstünde kalıp çarpmayı kaçırabilir ve kısa süreliğine havada raporlanır. (a) eğim hareketiyle ilgisiz bir içerik hatasıdır. (c) titreme değil tamamen bozuk bir sorguyu tanımlar. (d) bu tür bir kaçırmanın oluş şekli değildir; bu bir adım-boyutu sınırı değil geometrik erişim sorunudur.",{"id":181,"topic":9,"difficulty":150,"body":182,"options":183,"correct_key":154,"explanation":192},"01a034ec-0ced-742a-bb44-37b673961c7f","Tek bir düz-aşağı ray ile karşılaştırıldığında, zemin tespiti için küçük bir küre ya da kapsül süpürmesi kullanmak karakter kontrolcüsüne pratikte ne kazandırır?",[184,186,188,190],{"key":154,"text":185},"Nokta yerine küçük bir alanı örnekler",{"key":157,"text":187},"Yüzey normaline olan ihtiyacı ortadan kaldırır",{"key":160,"text":189},"Her eğimde zemin temasını garanti eder",{"key":163,"text":191},"Yatay hareket hızını otomatik hesaplar","Süpürmenin genişliği vardır, bu yüzden sonsuz ince tek bir çizgi yerine bir alanı kontrol eder; bu, karakter bir kenara yakınken ya da küçük bir çıkıntı\u002Fboşluk varken tek bir rayın aradan sızabileceği durumlara karşı daha toleranslıdır. (b) yanlıştır, süpürme yine bir normal döndürür. (c) abartılıdır: eğim limiti gibi başka koşullar yine teması kesebilir. (d) zemin tespitiyle ilgisizdir.",{"id":194,"topic":9,"difficulty":195,"body":196,"options":197,"correct_key":163,"explanation":206},"01a034ec-0cfc-7376-9639-3a17ffc7eb90",2,"Bir kontrolcü, her adımda o adımın zemin kontrolüne dayanarak boolean bir 'zeminde' durumu tutar. Zeminde durumu false olduğu tek adımda bile son ölçülen zemin normalinin hemen atılmayıp saklanması neden yaygındır?",[198,200,202,204],{"key":154,"text":199},"Normal karakterin gölgesi için gereklidir",{"key":157,"text":201},"Fizik motoru bir sonraki çarpışma için normal ister",{"key":160,"text":203},"Bu, bir sonraki adımdaki zemin kontrolünü atlatır",{"key":163,"text":205},"Aynı adımdaki hareket kodu o normale hâlâ ihtiyaç duyabilir","Hareketi bir eğim düzlemine kenetleme ya da karakterin kayıp kaymayacağına karar verme gibi bazı kontrolcü mantıkları aynı adımın zemin normaliyle çalışır; son değeri saklamak, durum aniden değiştiği anda bu mantığın boş bir değerle karşılaşmasını önler. (a) ilgisizdir, gölgeler kendi geometri geçişini kullanır. (b) bir fizik motoru zorunluluğu değil, kontrolcü tarafı bir muhasebedir. (c) yanlıştır, bir sonraki adım yine kendi taze kontrolüne ihtiyaç duyar.",{"id":208,"topic":9,"difficulty":150,"body":209,"options":210,"correct_key":157,"explanation":219},"01a034ec-0d00-726f-b95f-0186952a6ee2","Bir platform oyunu kontrolcüsü 'coyote time' uygular: karakter zıplama girdisi olmadan bir çıkıntıdan yürüyerek ayrıldıktan sonra kısa bir tolerans penceresi boyunca basılan bir zıplama hâlâ geçerli bir zemin zıplaması sayılır. Bu hangi sorunu çözer?",[211,213,215,217],{"key":154,"text":212},"Çıkıntılardan kazara düşmeleri",{"key":157,"text":214},"Temas kesildikten hemen sonra basılan zıplamayı",{"key":160,"text":216},"Çıkıntılara yakın düşük azami zıplama yüksekliğini",{"key":163,"text":218},"Havadayken zemin kontrolüne olan ihtiyacı","Oyuncular 'hâlâ çıkıntıdaydım' hissini temasın kesildiği tam kareden biraz sonra algılar; bu yüzden yalnızca aynı kareye izin veren katı bir kural tepkisiz hissettirir, kısa bir tolerans penceresi bu algı farkını yutar. (a) yanlıştır, karakter yine düşer, sadece kısa süre zıplama hâlâ izinlidir. (c) ilgisizdir, tolerans penceresi zıplama yüksekliğini değiştirmez. (d) yanlıştır, zemin kontrolleri normal şekilde çalışmaya devam eder.",{"id":221,"topic":9,"difficulty":195,"body":222,"options":223,"correct_key":154,"explanation":232},"01a034ec-0d0f-7db2-b3b1-be9096de04c4","Değişken zıplama yüksekliği vermenin (kısa dokunuş alçak, basılı tutma yüksek zıplatır) iki yaygın yolu şunlardır: (1) zıplama tuşu bırakıldığında yukarı hızı kesmek, (2) tuş basılı tutulmuyorsa yükselirken daha güçlü yerçekimi uygulamak. Bu ikisi arasındaki temel mekanik fark nedir?",[224,226,228,230],{"key":154,"text":225},"(1) tek seferlik, (2) sürekli",{"key":157,"text":227},"(1) yalnızca yerçekimi yokken çalışır",{"key":160,"text":229},"(2) zıplama tuşunu tamamen kaldırmayı gerektirir",{"key":163,"text":231},"(1) yalnızca karakterin ilk zıplamasında geçerlidir","Hız-kesme, bırakma anında uygulanan tek seferlik bir düzenlemedir; yerçekimi-ölçekleme ise tuş basılı değilken yükseliş boyunca her adımda uygulanan ivmeyi sürekli değiştirir ve daha yumuşak, sürekli ayarlanabilir bir yay üretir. (b) yanlıştır, ikisi de normal yerçekiminde çalışır. (c) yanlıştır, yerçekimi-ölçekleme yine tuş durumunu okur. (d) mekanik bir dayanağı olmayan keyfi bir kısıtlamadır.",{"fields":234,"seniorities":446,"interview_shapes":447,"locales":452,"oauth":454,"question_count":457,"coach_enabled":458,"jd_match_enabled":458},[235,260,280,296,320,333,352,371,393,412,427,437],{"key":236,"name_tr":237,"name_en":237,"sort":150,"specializations":238},"backend","Backend",[239,242,245,248,251,254,257],{"key":240,"name":241,"field":236},"general","Genel",{"key":243,"name":244,"field":236},"go","Go",{"key":246,"name":247,"field":236},"python","Python",{"key":249,"name":250,"field":236},"java","Java",{"key":252,"name":253,"field":236},"csharp","C#\u002F.NET",{"key":255,"name":256,"field":236},"nodejs","Node.js",{"key":258,"name":259,"field":236},"php","PHP",{"key":261,"name_tr":262,"name_en":262,"sort":195,"specializations":263},"frontend","Frontend",[264,265,268,271,274,277],{"key":240,"name":241,"field":261},{"key":266,"name":267,"field":261},"javascript","JavaScript",{"key":269,"name":270,"field":261},"typescript","TypeScript",{"key":272,"name":273,"field":261},"react","React",{"key":275,"name":276,"field":261},"vue","Vue",{"key":278,"name":279,"field":261},"angular","Angular",{"key":281,"name_tr":282,"name_en":282,"sort":168,"specializations":283},"fullstack","Fullstack",[284,285,286,287,288,289,290,291,292,293,294,295],{"key":240,"name":241,"field":281},{"key":243,"name":244,"field":236},{"key":246,"name":247,"field":236},{"key":249,"name":250,"field":236},{"key":252,"name":253,"field":236},{"key":255,"name":256,"field":236},{"key":258,"name":259,"field":236},{"key":266,"name":267,"field":261},{"key":269,"name":270,"field":261},{"key":272,"name":273,"field":261},{"key":275,"name":276,"field":261},{"key":278,"name":279,"field":261},{"key":297,"name_tr":298,"name_en":298,"sort":299,"specializations":300},"devops-cloud","DevOps \u002F Cloud",4,[301,302,305,308,311,314,317],{"key":240,"name":241,"field":297},{"key":303,"name":304,"field":297},"aws","AWS",{"key":306,"name":307,"field":297},"gcp","GCP",{"key":309,"name":310,"field":297},"azure","Azure",{"key":312,"name":313,"field":297},"kubernetes","Kubernetes",{"key":315,"name":316,"field":297},"terraform","Terraform",{"key":318,"name":319,"field":297},"linux","Linux",{"key":321,"name_tr":322,"name_en":322,"sort":323,"specializations":324},"ai-engineer","AI Engineer",5,[325,326,327,330],{"key":240,"name":241,"field":321},{"key":246,"name":247,"field":321},{"key":328,"name":329,"field":321},"llm-rag","LLM\u002FRAG",{"key":331,"name":332,"field":321},"mlops","MLOps",{"key":334,"name_tr":335,"name_en":336,"sort":337,"specializations":338},"database","Veritabanı","Database",6,[339,340,343,346,349],{"key":240,"name":241,"field":334},{"key":341,"name":342,"field":334},"postgresql","PostgreSQL",{"key":344,"name":345,"field":334},"mysql","MySQL",{"key":347,"name":348,"field":334},"mongodb","MongoDB",{"key":350,"name":351,"field":334},"redis","Redis",{"key":353,"name_tr":354,"name_en":355,"sort":356,"specializations":357},"mobile","Mobil","Mobile",7,[358,359,362,365,368],{"key":240,"name":241,"field":353},{"key":360,"name":361,"field":353},"ios-swift","iOS (Swift)",{"key":363,"name":364,"field":353},"android-kotlin","Android (Kotlin)",{"key":366,"name":367,"field":353},"flutter","Flutter",{"key":369,"name":370,"field":353},"react-native","React Native",{"key":372,"name_tr":373,"name_en":374,"sort":375,"specializations":376},"security","Güvenlik","Security",8,[377,378,381,384,387,390],{"key":240,"name":241,"field":372},{"key":379,"name":380,"field":372},"appsec","AppSec",{"key":382,"name":383,"field":372},"offensive-pentest","Offensive \u002F Pentest",{"key":385,"name":386,"field":372},"cloud-security","Cloud Security",{"key":388,"name":389,"field":372},"devsecops","DevSecOps",{"key":391,"name":392,"field":372},"blue-team-incident","Blue Team \u002F Incident",{"key":394,"name_tr":395,"name_en":396,"sort":397,"specializations":398},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[399,400,403,406,409],{"key":240,"name":241,"field":394},{"key":401,"name":402,"field":394},"test-automation","Test Automation",{"key":404,"name":405,"field":394},"sdet","SDET",{"key":407,"name":408,"field":394},"performance-testing","Performance Testing",{"key":410,"name":411,"field":394},"mobile-qa","Mobile QA",{"key":413,"name_tr":414,"name_en":414,"sort":415,"specializations":416},"data-engineer","Data Engineer",10,[417,418,421,424],{"key":240,"name":241,"field":413},{"key":419,"name":420,"field":413},"pipelines-etl","Pipelines \u002F ETL",{"key":422,"name":423,"field":413},"streaming","Streaming",{"key":425,"name":426,"field":413},"warehousing","Warehousing",{"key":5,"name_tr":6,"name_en":428,"sort":429,"specializations":430},"Game Development",11,[431,432,433,434,435,436],{"key":240,"name":241,"field":5},{"key":142,"name":143,"field":5},{"key":145,"name":146,"field":5},{"key":132,"name":133,"field":5},{"key":136,"name":137,"field":5},{"key":139,"name":140,"field":5},{"key":438,"name_tr":439,"name_en":439,"sort":440,"specializations":441},"ml-engineer","ML Engineer",12,[442,443],{"key":240,"name":241,"field":438},{"key":444,"name":445,"field":438},"classical-ml","Classical ML",[14,15,16],{"junior":448,"mid":450,"senior":451},{"questions":449,"median_sec":3},20,{"questions":449,"median_sec":3},{"questions":449,"median_sec":3},[10,453],"en",[455,456],"google","github",27600,true]