2015-Sena Şahin - Unity3D Ve C# Ile Oyun Geliştirme

36
T.C. B ˙ ILEC ˙ IK ¸ SEYH EDEBAL ˙ I ÜN ˙ IVERS ˙ ITES ˙ I MÜHEND ˙ ISL ˙ IK FAKÜLTES ˙ I B ˙ ILG ˙ ISAYAR MÜHEND ˙ ISL ˙ I ˘ G ˙ I C# ˙ ILE 2D OYUN YAPIMI SENA ¸ SAH ˙ IN 51031399618 PROJE-1 ÇALI ¸ SMASI PROJE DANI¸ SMANI: Ögr.Gör. Murat ÖZALP 9 Haziran 2015 B ˙ ILEC ˙ IK

description

Proje raporu

Transcript of 2015-Sena Şahin - Unity3D Ve C# Ile Oyun Geliştirme

  • T.C.

    BILECIK SEYH EDEBALI NIVERSITESI

    MHENDISLIK FAKLTESI

    BILGISAYAR MHENDISLIGI

    C# ILE 2D OYUN YAPIMI

    SENA SAHIN

    51031399618

    PROJE-1 ALISMASI

    PROJE DANISMANI : gr.Gr. Murat ZALP

    9 Haziran 2015

    BILECIK

  • T.C.

    BILECIK SEYH EDEBALI NIVERSITESI

    MHENDISLIK FAKLTESI

    BILGISAYAR MHENDISLIGI

    C# ILE 2D OYUN YAPIMI

    SENA SAHIN

    51031399618

    PROJE-1 ALISMASI

    PROJE DANISMANI : gr.Gr. Murat ZALP

    9 Haziran 2015

    BILECIK

  • ZET

    Projenin Amac

    Unity3d oyun motoru arayzn, temel alsma mantgn grenmek ve Android telefon-

    larda oynanabilecek bir 2D oyun gelistirmek amaland.

    Projenin Kapsam

    Unity3d arayz bilgileri ve grenilen Unity3d bilgileri erevesinde gelistirilen oyun ile

    ilgili bilgiler yer almaktadr.

    Sonular

    Unity3d oyun motorunun temelleri grenildi ve Android telefonlarda oynanabilecek basit

    bir 2D oyun gelistirildi.

    ii

  • TESEKKR

    Bu projenin basndan sonuna kadar hazrlanmasnda emegi bulunan ve beni bu konuya

    ynlendiren saygdeger hocam ve dansmanm Sayn gr.Gr. Murat ZALPe tm kat-

    klarndan ve hi eksiltmedigi desteginden dolay tesekkr ederim.

    Sena SAHIN

    9 Haziran 2015

    iii

  • Iindekiler

    ZET ii

    TESEKKR iii

    SEKIL LISTESI vi

    1 GIRIS 1

    2 PROJEDE KULLANILAN ARALAR 2

    2.1 Unity3d Nedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2.1.1 Asset store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2.2 Unity3d Arayz grenimi . . . . . . . . . . . . . . . . . . . . . . . . . 3

    2.2.1 Toolbar Paneli . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    2.2.2 Hierarchy paneli . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2.2.3 Project paneli . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2.2.4 Inspector paneli . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2.2.5 Scene(Sahne) paneli . . . . . . . . . . . . . . . . . . . . . . . . 5

    2.2.6 Game paneli . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2.2.7 Console (Konsol) paneli . . . . . . . . . . . . . . . . . . . . . . 6

    2.3 GameObject Nedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2.3.1 GameObject - component iliskisi . . . . . . . . . . . . . . . . . . 6

    2.3.2 Component - script iliskisi . . . . . . . . . . . . . . . . . . . . . 7

    2.4 Prefab Olusturmak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2.5 Degerlerin Test Edilmesi . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.6 Ebeveyn Atama (Parenting) . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.7 Kodlama Mekanizmasi(MonoDevelop) . . . . . . . . . . . . . . . . . . . 8

    2.8 Unity Fonksiyonlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    2.9 NGUI Nedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3 PROJENIN TASARIMI VE GEREKLESTIRILMESI 11

    3.1 Grafiklerin Olusturulmas ve Kullanlacak gelerin Belirlenmesi . . . . . 11

    3.2 NGUI ile Arayz Yapm . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    iv

  • 3.3 Arka Plan Sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.4 Parallax Etkisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.5 Karakter Sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    3.6 Sprite Mantg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    3.7 Kamera Sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    3.8 Engel Sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    3.9 arpsma Sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    3.10 Skor Sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    3.11 Ses Efektleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    3.12 Android SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    SONULAR 27

    KAYNAKLAR 28

    ZGEMIS 29

    v

  • Sekil Listesi

    1 Arayz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    2 Hareket Butonlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    3 Transform Gizmo Butonlar . . . . . . . . . . . . . . . . . . . . . . . . . 3

    4 Oynatma - Durdurma Butonlar . . . . . . . . . . . . . . . . . . . . . . . 4

    5 Layers Butonu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    6 Layout Butonu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    7 Scene Gizmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    8 Translate - Rotate - Scale Gizmolar . . . . . . . . . . . . . . . . . . . . 6

    9 Arkaplan Katmanlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    10 Arkaplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    11 Karakter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    12 Engeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    13 Arayz Butonlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    14 Oyun1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    15 Oyun2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    vi

  • 1 GIRIS

    Projemde yapms oldugum oyuna benzer oyunlar fazlasyla mevcut.Digerleri ile ayn

    mantk olup engelleri asarak en yksek skoru yaparak birinci olmak.Bu tarz bir oyunu

    seme nedenim baslang projesi olarak ideal oldugunu dsnmem. Projemde Unity3d

    oyun motoruu kullandm.Cryengine,Udk gibi baska oyun motrlar da var ama bunlar bil-

    gisayar kullanm iin daha iyi , unity ise mobil cihazlar iin zellikle yaplms ve optimize

    edilmis.

    Unity otun motorunu seme nedenlerim:

    -Her trl mobil cihaz ile uyumlu olarak alsyor olmas.

    -Neredeyse hi bir degisiklik yapmadan bilgisayar ortamndan ios,android ,playstation vb.

    birok programa kt verilebiliyor olmas.

    -Kaynaklar az tketmeye alsyor olmas ve srekli gncelleme halinde olan bir yapya

    sahip olmas.

    -Bir sorun ile karslasldgnda ilgili soruna ynelik dkmana internet ile annda ulasl-

    nabiliyor olmas ki bu kullanc kitlesi ok byk oldugu iin.

    -Asset Store Unitynin eklenti indirme ve satn alma blmdr. Burada bir ok eklentiye

    cretsiz olarak ulasabileceginiz gibi, cretli olarak alabileceginiz eklentilerde bulunmak-

    tadr.

    Projemde kullanms oldugum programlar:

    Adobe Photoshop ,Unity3d(4.6.3) programlar kullanld.

    Projem iin temin ettigim yaplar:

    Arka plan grafikleri http://graphicriver.net/ den cretli olarak, Ngui cretsiz olarak,karaketer

    zplama fonksiyonu incelenmesi iin rnek uygulama Asset Storedan cretsiz olarak

    ,karakter ve engel iin kullanlan grseller https://www.google.com.tr/ dan cretsiz ola-

    rak,ses efektleri freesound.org dan cretsiz olarak temin edildi.

    1

  • 2 PROJEDE KULLANILAN ARALAR

    2.1 Unity3d Nedir

    Unity 3D, bir oyun motorudur. Oyun ve bilisim dnyasna getirdigi en nemli yenilik,

    gelismis zelliklere sahip 3 boyutlu oyunlarn bilgisayara kurulmadan oynanmasn sag-

    lamak olmustur. Unity 3D motorunu kullanan oyunlar, Unity Web Player eklentisi saye-

    sinde hibir kurulum islemi olmadan web tarayc zerinden alsabilmektedir. Bu yn

    sayesinde oyunlar bilgisayara daha az yklenirken bir oyuncuyu yeni bilgisayar alma zah-

    metinden kurtarms olur. te yandan oyun reticileri, oyunu kendi sunucularndan oynat-

    tklar iin korsan oyuna are bulmus olur. Unity 3D motoru ile yazlms oyunlara rnek

    olarak Battlestar Galactica Online verilebilir.

    Unitynin oyun yapmclarna sagladg baska bir kolaylk da Unity ile gelistirilen bir

    oyunun herhangi bir altyap degisikligine gerek olmadan farkl platformlara (PC, Mac,

    Web, iOS, Android, Windows Phone) uygun olarak derlenebilmesidir. Bu sayede PC iin

    hazrlanan bir oyun tek tklamayla Mac iinde alsr hale getirilebilir.

    Unity son derece pahal diger gelismis oyun motorlarnn (Havok, vb.) sundugu gelis-

    mis shader yazlm, fizik motoru, animasyon editr, occlusion culling gibi zellikleri,

    uygulama ve oyun gelistiricilerine makul bir fiyattan sunmaktadr. Unitynin diger oyun

    motorlarndan stn taraflarndan biri de oyun gelistirme zamannda gelistiriciye program

    kodu yazma olanag vermesidir. Diger oyun motorlarnn ekserisi grafik ile kodu ayrms-

    ken, Unity ile grafik ve kod birlikte alsmaktadr. Bu alsma mantg gelistiriciye es-

    neklik saglamakta, gelistirme sresini ksaltmaktadr. Unity 3D su anda 3 farkl betik dil

    yapsn (Java Script, C# ve Boo) desteklemektedir.

    Unitye gelen 2D destegi , 2D alsmalarn yapmna olanak saglamaktadr.

    2.1.1 Asset store

    Asset store iinde hazr materyaller, bitmis projeler, ksaca oyun gelistirme srecini ksalt-

    maya ynelik her trl kaynag barndran bir komunitedir. Bu materyalleri cretsiz veya

    cretli olarak satn alabilir veya Asset store da satmak zere asset gelistirebilirsiniz.Unity

    nin tercih edilmesindeki en nemli sebeplerden birisi de budur.

    2

  • 2.2 Unity3d Arayz grenimi

    Sekil 1: Arayz

    2.2.1 Toolbar Paneli

    Ara ubugu

    Ara ubugu 5 adet temel fonksiyona hzl erisim saglamaktadr.

    Sekil 2: Hareket Butonlar

    Hareket (Transform) Butonlar : Scene paneli ierisinde kullanlr.

    Sekil 3: Transform Gizmo Butonlar

    Transform Gizmo Butonlar : Scene panelindeki grnm etkiler.

    3

  • Sekil 4: Oynatma - Durdurma Butonlar

    Oynatma-Durdurma ,Bir Adm Ileri Sarma (Step) Butonlar : Game (Oyun) paneliyle be-

    raber kullanlr.

    Sekil 5: Layers Butonu

    Layers (Katmanlar) Butonu : Sahnede gsterilecek objeleri belirlemeye yarar.

    Sekil 6: Layout Butonu

    Layout (Pencere Dzeni) Butonu : Sahnedeki pencerelerin dzenini degistirmeye yarar.

    2.2.2 Hierarchy paneli

    Hiyerarsi paneli ierisinde, o an baktgnz sahnede yer alan tm GameObjectler gsteri-

    lir. Bunlardan bazlar bir objenin direk kendisi olabilirken bazs da bir Prefabn kopyas

    olabilir. Objeleri Hiyerarsi paneli sayesinde seip objelerinize ebeveyn obje atayabilirsi-

    niz (Parent).

    2.2.3 Project paneli

    Tm Unity projeleri Assets klasr ierir. Bu klasrn ierigi ise Proje panelinde grnr

    durumdadr. Burada oyununuzu oyun yapan her seyi, yani Assetleri depolarsnz, rnegin

    scriptler, 3 boyutlu modeller, kaplamalar (texture), ses dosyalar (audio file) ve Prefablar

    gibi.

    4

  • 2.2.4 Inspector paneli

    Unityde tasarlanan oyunlar, esitli 3 boyutlu sekillere (mesh), scriptlere, seslere veya

    sklar (Light) gibi esitli grafiksel elementlere sahip olan pek ok GameObjectten olusur.

    Inspector paneli, o an seili olan objeyle ilgili detayl bir grnm sunar ve o objenin tm

    Componentlerini (Para) ve bu Componentlerinin zelliklerini burada gsterir. Bu panel

    vastasyla GameObjectlerinizin olusturdugunuz dnyanzdaki fonksiyonelligini ayarlar-

    snz. Ayrca Inspector paneli vastasyla, dsardan import (ie aktarma) yaptgnz bir

    dosyann tm zelliklerini de grebilir ve degistirebilirsiniz.

    2.2.5 Scene(Sahne) paneli

    Bu paneli kullanarak objelerinizi, yer sekillerini, kameray, karakterinizi, dsmanlar, yani

    tm GameObjectlerinizi konumlandrabilirsiniz. Objeleri bu panel vastasyla konumlan-

    drmak Unitynin en nemli fonksiyonlarndan biridir. Bu sayede bu islemleri olduka

    hzl bir sekilde gereklestirebilirsiniz.

    Sekil 7: Scene Gizmo

    Scene panelinin sag st ksesinde grdgnz Scene Gizmodur. Bu sey, kameranzn o

    anki rotasyonunu gsterir ve hzl bir sekilde kameranzn asn degistirebilmenizi sag-

    lar. Bu parann herhangi bir koluna tklayarak sahne kameranz o yne bakacak sekilde

    ayarlayabilirsiniz.

    Asagda Translate, Rotate ve Scale fonksiyonlarnn Gizmolarn grebilirsiniz:

    5

  • Sekil 8: Translate - Rotate - Scale Gizmolar

    2.2.6 Game paneli

    Sahnenizdeki kamera yada kameralarn gzyle, oyununuzu test etmeye yarar. Bu sekilde

    oyununuzun yaynlandgnda nasl duracagn grebilirsiniz. Bir oyunu oynamanz iin

    sahnenizde en azndan 1 kameranzn olmas gereklidir.

    2.2.7 Console (Konsol) paneli

    Console paneli esitli mesajlar, uyarlar ve hatalar gsterip Debug asamasnda size yar-

    dmc olur.

    2.3 GameObject Nedir

    Oyununuzda yer alan her bir obje bir GameObjecttir.

    2.3.1 GameObject - component iliskisi

    Nasl bir obje olusturacagnza bagl olarak, bir GameObjectin ierisine degisik Com-

    ponentler atayarak farkl farkl kombinasyonlar kurarsnz. Unitynin ierisindeki hazr

    Componentleri kullanabileceginiz gibi script yazarak kendi Componentlerinizi de olus-

    turabilirsiniz.

    Inspector panelini kullanarak Componentlerin herhangi bir zelligini degistirebilirsiniz.

    6

  • rnek olarak Main Camera GameObjecti: Camera,GUILayer, Flare Layer ve Audio Lis-

    tener olmak zere esitli Componentlerden olusur.

    Bizim iin nemli olan componentlerden bazlar:Transform,Rigidbody,Collider vs.

    1)Transform Componenti: Baslangta otomatik olarak tm GameObjectlerde Trans-

    form Componenti bulunur. Bunun sebebi de Transformun, o objenin konumunu, yaptg

    alar ve boyutunu ifade etmesidir. Bu Component, GameObjectin 3 boyutlu uzaydaki

    konumunu (position), yaptg alar (rotation) ve boyutunu (scale) ifade eder.

    2)Rigidbody Componenti: Kat cisim yapmaya yarayan, yerekimi gibi fizik kurallarn

    bir objeye uygulamak iin gerekli olan Componenttir.

    3)Collider Componenti : Bir objenin ,temasa geilebilen hacmini belirlemeye yarayan

    Componenttir.rnek olarak futbol topunun Collideri kre seklindedir.Collider sadece Scene

    panelinde gzkr ,Game panelinde gzkmez.

    2.3.2 Component - script iliskisi

    Bir script olusturdugunuzda ve bu scripti bir GameObjecte atadgnzda script, tpk

    Componentlerde oldugu gibi GameObjectin Inspector panelinde belirir. Bunun sebebi

    scriptlerin atandklar zaman birer Componente dnsmeleridir, nk scriptler de bi-

    rer zellestirilebilir Component esididirler. Yani anlayacagnz scriptler, kendi olustura-

    bileceginiz Componentlerdir. Scriptlerin ierisinde, Inspectorda gzkecek zellikleri

    girersiniz ve script ierisine ne yazdysanz oyun srasnda bu kod aynen alstrlr.

    2.4 Prefab Olusturmak

    Prefablar bir grup GameObjectin ve Componentin; sahnede tekrar ve tekrar kullanl-

    mas iin hazrlanan, hazr sablonlardr. Tek bir Prefabtan pek ok obje olusturulabilir,

    bu isleme kopyalama denir. rnegin engelleri ele alalm. Bir engel Prefab olusturmak, o

    engeli sahnenin pek ok yerinde hzlca yerlestirebilmenizi saglar. Sahnenize yerlestirece-

    giniz bu engeller tek bir Prefaba bagl oldugu iin de, o Prefabda yapacagnz herhangi

    bir degisiklik tm engel kopyalarna da uygulanacaktr. Yani eger bu engellerin materya-

    lini, dokusunu vb. degistirmek isterseniz bu islemi sadece engel Prefabna uygulamanz

    7

  • yeterlidir. Bylece o Prefabdan retilmis tm engel kopyalarna, yaplan degisiklik oto-

    matik olarak uygulanacaktr. Ayrca bir kopya zerinde de herhangi bir degisiklik yapp

    ardndan menden GameObject -> Apply Changes to Prefab (Degisiklikleri Prefaba Uy-

    gula) seenegini seebilirsiniz. Bu islem, assetlerinizi dzenlerken ve gncellerken epey

    zaman kazanmanz saglar.

    2.5 Degerlerin Test Edilmesi

    Play Modedeyken (Oynatma Modu) bir GameObjectin herhangi bir degerini Inspec-

    tordan dilediginizce degistirebilirsiniz.Mesela farkl yksekliklerde zplayabilmenin na-

    sl olacagn test edebilirsiniz. Eger bir scriptte Ziplama Yuksekligi adnda bir degisken

    olusturursanz, oynatma modundayken bunun degerini degistirebilirsiniz ve zplama tu-

    suna basp yaptgnz degisikligin etkilerini test edebilirsiniz.Anlk testler yapabilir, esitli

    ayarlamalar ve kalibrasyonlar uygulayabilirsiniz.

    2.6 Ebeveyn Atama (Parenting)

    Unity, Parenting adnda bir sistem kullanr. Bir GameObjecti baska bir GameObjectin

    ocugu (child) yapmak iin child objeyi seip parent (ebeveyn) objenin zerine srk-

    lemelisiniz. Bir child obje, parent objesinin hareket ve rotasyon islemlerini aynen kendi

    zerinde de uygulayacaktr.

    2.7 Kodlama Mekanizmasi(MonoDevelop)

    Unity3D iin standart IDE yani yazlm gelistirme ksm kendisi ile birlikte gelen Mono-

    Develop programdr, ancak istenilen IDE Unity3D ile birlikte kullanlabilir.

    Mono, gelistiricilere apraz platform birden fazla isletim sisteminde alsabilen program-

    lar yazma imkan veren bir yazlm platformudur. Mono, .NET Frameworkun Linux mu-

    adilidir, ak kaynakldr, zgrdr, ECMA standartlarn destekler.Mono platformunda

    C# dili kullanlr. Mono, C# dilinin gcn ve kolaylgn Linuxa aktararak Linux prog-

    ramclarnn da yzde yz nesne ynelimli, verimli ve performansl olan bu dille nitelikli

    programlar yazabilmelerini saglar. Ayrca, Monoya zg olan snflar kullanmazsanz

    8

  • programnzn Windowsta alsabilmesi iin o bilgisayarda sadece .NET Frameworkun

    kurulu olmas yeterli olacaktr.

    2.8 Unity Fonksiyonlar

    Start(): Baslangta tek seferlik alsacak kodlarn

    yazldg fonksiyondur.

    Update(): Her bir kare(frame)de srekli olarak alsacak

    kodlarn yazldg fonksiyondur.

    Awake():Buraya yazlan kod,script alstrlmadan hemen

    nce gereklestirilir.Start()fonksiyonu Awake()den

    sonra Update()den nce alstrlr.

    Debug.Log():Konsola yaz yazdrmak ve hata olustugunda

    ilgili nesneyi bulmak iin kullanlr.

    GameObject.Find():Gameobject i bulmaya yarayan fonksiyondur.

    GameObject.FindChild:Gameobject in child n bulmaya

    yarayan fonksiyondur.

    transform.Translate(): Bir GameObjecti hareket ettirmek

    iin pozisyonunu ayarlar.

    transform.position():Bir GameObjectin eksenlerindeki

    konumunu ayarlar.

    gameObject.GetComponent():GameObjectin Componentlerine

    erismeye yarar.

    rigidbody2D.AddForce():Kuvvet uygulamaya yarar.

    Vector2: 2 bilesenli vektr tanmlamaya yarar.

    Vector3: 3 bilesenli vektr tanmlamaya yarar.

    Time.time: Oyunun baslangcndan itibaren ka saniye

    getigini depolar.

    OnTriggerEnter2D (): Obje Collidernda Is Trigger isaretli

    bir objeyle temas edince alstrlr.

    OnCollisionEnter2D(): Obje Collidernda Is Trigger isaretli

    olmayan bir objeyle temas edince alstrlr.

    9

  • Destroy(): GameObject i yok etme amal kullanlr.

    Instantiate: Yeni objeler olusturmak iin kullanlr.

    yield WaitForSeconds(): Belli bir saniye getikten sonra

    kodun alstrlmasna devam edilir.

    Input.GetMouseButtonDown(): Mousea baslp baslmadgn

    kontrol etme amal kullanlr.

    Input.GetButtonDown():Tusa baslp baslmadgn kontrol

    etme amal kullanlr.

    Application.LoadLevel():Oyun-uygulama levelini baslatmak

    iin kullanlr.

    Application.Quit: Oyun-uygulamadan kmak iin kullanlr.

    TweenPosition.Begin():Objenin konumunu degistirmek iin

    kullanlr.(NGUI)

    2.9 NGUI Nedir

    Arayz yapmaya yarayan, gelistiricinin isini oka kolaylastran, butonlar ve ekrandaki

    yazlar tasarlamaya saglayan ,hem vakitten hem de performanstan kazandran bir tool

    dur. Ngui tm resimleri atlas yapsnda toplayarak, hem performans asndan hem de

    kullanm sistemi asndan gelistiriciye ok byk yarar saglar ve oyunun yapm sresini

    hzlandrr.

    10

  • 3 PROJENIN TASARIMI VE GEREKLESTIRILMESI

    3.1 Grafiklerin Olusturulmas ve Kullanlacak gelerin Belirlenmesi

    Arka plan grafikleri graphicriver den temin edildi.

    Sekil 9: Arkaplan Katmanlar

    Her katman 1024 boyutunda kesilerek 3 erli paralar halinde birlestirildi.Birlestirilen her

    l para prefab olarak kaydedildi.Katmanlar sahne iinde dzenli sralamayla st ste

    eklenerek istenilen arka plan grnts olusturuldu.

    Sekil 10: Arkaplan

    Oyunda kullanlan diger resimler:

    Karakter:

    11

  • Sekil 11: Karakter

    Engeller:

    Sekil 12: Engeller

    Butonlar:

    Sekil 13: Arayz Butonlar

    3.2 NGUI ile Arayz Yapm

    NGUI->Create->Unity2DSprite seimi ile UI yaps projeye eklenmis oldu.Bu yap ieri-

    sine kullanacak butonlar olusturuldu ve zerinde grnmesini istenilen resim giydirildi.

    12

  • NGUI->Widget seimi ile ereve olusturulmus oldu.Olusturulmus olan butonlar child

    olarak bu ereve ierisine dahil edildi.Bunun amac butonlarn birlikte hareket etmesini

    saglamak.

    Ngu->create->Label seimi ile butonlarn zerinde kullanlacak yazlarn yazlmas sag-

    land ve labellar butonlar zerine sabitlendi.

    public class butonkay : MonoBehaviour {

    void Start () {

    Time.timeScale=0;

    }

    void Update () {

    }

    public void cercevekaydir1()

    {

    TweenPosition.Begin(GameObject.Find("cerceve"),

    1,new Vector3(0,495,0));

    GameObject.Find("hero").gameObject.

    GetComponent().oyunbasladimi=true;

    TweenPosition.Begin(GameObject.Find("skr"),1,

    new Vector3(193,132,0));

    Time.timeScale=1;

    }

    public void cercevekaydir2()

    {

    TweenPosition.Begin(GameObject.Find("cerceve"),

    2,new Vector3(0,0,0));

    }

    }

    13

  • 3.3 Arka Plan Sistemi

    Her katman iin ayr hareket scripti tanmland ve her birinin hz degiskeni iin deger

    atand.

    public class hareket : MonoBehaviour {

    public float hiz;

    void Start () {

    }

    void Update () {

    this.transform.Translate(hiz*Time.deltaTime,0,0);

    }

    }

    3.4 Parallax Etkisi

    "Parallax" n Trke anlam "Paralaks" dr.Paralaks duragan nesnelerin farkl zamanda

    gzlenen dogrultuda ilerlemesi ile meydana gelen degisimlerdir.Resimler zerine uygula-

    nan bu efekt grlen konum ve gerek konum arasnda fark olusturur.Resimlere derinlik

    katar ve neredeyse onlar 3 boyutlu hale getirir.

    public class olusmadeneme : MonoBehaviour {

    public GameObject karakter;

    public GameObject[] olusmanoktasideneme;

    public GameObject[] katman;

    public GameObject[] sonolusan;

    public float[] uzakliklar;

    void Update () {

    //karakter ile olumsa noktas arasndaki mesafe

    hesaplanp diziye atand

    for(int i=0;i

  • olusmanoktasideneme[i].transform.position=new

    Vector3(sonolusan[i].transform.position.x-10,

    sonolusan[i].transform.position.y,

    sonolusan[i].transform.position.z);

    }

    if( uzakliklar[8]>=-10)

    {

    GameObject son= Instantiate

    (katman[8],new Vector3

    (sonolusan[8].transform.position.x

    +(60.4f),0,10),Quaternion.identity)

    as GameObject;

    sonolusan[8] = son;

    }

    if( uzakliklar[7]>=-10)

    {

    GameObject son= Instantiate

    (katman[7],new Vector3

    (sonolusan[7].transform.position.x

    +(61.4f),-5.8f,10),Quaternion.identity)

    as GameObject;

    sonolusan[7] = son;

    }

    if( uzakliklar[6]>=-10)

    {

    GameObject son= Instantiate

    (katman[6],new Vector3

    (sonolusan[6].transform.position.x

    +(60.44f),-5.1f,10),Quaternion.identity)

    as GameObject;

    15

  • sonolusan[6] = son;

    }

    if( uzakliklar[5]>=-10)

    {

    GameObject son= Instantiate

    (katman[5],new Vector3

    (sonolusan[5].transform.position.x

    +(61.11f),-0.6f,10),Quaternion.identity)

    as GameObject;

    sonolusan[5] = son;

    }

    if( uzakliklar[4]>=-10)

    {

    GameObject son= Instantiate

    (katman[4],new Vector3

    (sonolusan[4].transform.position.x

    +(60.5f),-5.3f,10),Quaternion.identity)

    as GameObject;

    sonolusan[4] = son;

    }

    if( uzakliklar[3]>=-10)

    {

    GameObject son= Instantiate

    (katman[3],new Vector3

    (sonolusan[3].transform.position.x

    +(60.2f),-5.2f,10),Quaternion.identity)

    as GameObject;

    sonolusan[3] = son;

    }

    if( uzakliklar[2]>=-10)

    {

    16

  • GameObject son= Instantiate

    (katman[2],new Vector3

    (sonolusan[2].transform.position.x

    +(60.2f),7.6f,10),Quaternion.identity)

    as GameObject;

    sonolusan[2] = son;

    }

    if( uzakliklar[1]>=-10)

    {

    GameObject son= Instantiate

    (katman[1],new Vector3

    (sonolusan[1].transform.position.x

    +(61.44f),-18.8f,10),Quaternion.identity)

    as GameObject;

    sonolusan[1] = son;

    }

    if( uzakliklar[0]>=-10)

    {

    GameObject son= Instantiate

    (katman[0],new Vector3

    (sonolusan[0].transform.position.x

    +(75.6f),7.5f,10),Quaternion.identity)

    as GameObject;

    sonolusan[0] = son;

    }

    }

    }

    3.5 Karakter Sistemi

    public class hareket : MonoBehaviour {

    public float hiz;

    17

  • void Start () {

    }

    void Update () {

    this.transform.Translate(hiz*Time.deltaTime,0,0);

    }

    }

    -------------

    public class ziplama : MonoBehaviour {

    float carpimmiktari=1f;

    float carpimmiktari2=1f;

    float y=0f;

    public bool yerdemi=true;

    public bool flag=false;

    bool ikisnflag=false;

    bool dusmeflag=false;

    float a=0;

    void Start () {

    }

    void Update () {

    if (Input.GetKeyDown(KeyCode.Space) && yerdemi==true)

    {

    flag=true;

    ikisnflag=true;

    StartCoroutine(bekleme());

    }

    if(flag == true && ikisnflag == true)

    {

    this.transform.Translate(0,y,0);

    y+=0.01f*carpimmiktari;

    carpimmiktari+=0.05f;

    if(y>1f)

    18

  • {y=1f;

    }

    }

    if(ikisnflag==false && dusmeflag==true)

    {

    //translate:kendine ekler

    this.transform.Translate(0,-a,0);

    a+=0.01f*carpimmiktari2;

    carpimmiktari2+=0.05f;

    if(a>0.3f)

    a=0.3f;

    }

    }

    IEnumerator bekleme()

    {

    //0.30 sn bekle

    yield return new WaitForSeconds(0.30f);

    ikisnflag=false;

    dusmeflag=true;

    StartCoroutine(bekleme2());

    }

    IEnumerator bekleme2()

    {

    yield return new WaitForSeconds(0.15f);

    dusmeflag=false;

    y=0;

    a=0;

    }

    void OnCollisionEnter2D (Collision2D col)

    {

    19

  • if(col.gameObject.name=="sahtezemin")

    {

    // Debug.Log("carpti");

    yerdemi=true;

    }

    }

    void OnCollisionExit2D (Collision2D col)

    {

    if(col.gameObject.name=="sahtezemin")

    {

    // Debug.Log("carpmyor");

    yerdemi=false;

    }

    }

    3.6 Sprite Mantg

    Sprite, oyun programlamada animasyon grnm iin kullanlan, birden fazla, farkl

    veya ayni objeye ait spritelar ya da ayni objenin parcalar seklinde spritelar iceren sprittir.

    public class sprites : MonoBehaviour {

    public GameObject hero;

    public Sprite[] resimler;

    void Start () {

    StartCoroutine(spriteDegis());

    }

    // Update is called once per frame

    void Update () {

    }

    IEnumerator spriteDegis()

    {

    for(int i=0;i

  • {yield return new WaitForSeconds(0.1f);

    this.gameObject.GetComponent

    ().sprite=resimler[i];

    GameObject.Find("hero").transform.FindChild

    ("adam").GetComponent

    ().sprite=resimler[i];

    }

    StartCoroutine(spriteDegis());

    }

    }

    3.7 Kamera Sistemi

    public class kamera : MonoBehaviour {

    public GameObject karakter;

    public float takipmesafe;

    bool flag=false;

    float takiphiz=10;

    void Start () {

    StartCoroutine(basla());

    }

    void Update () {

    if(flag==true)

    {

    transform.position= Vector3.Lerp

    (newVector3(this.transform.position.x,

    this.transform.position.y,

    this.transform.position.z),

    new Vector3(karakter.transform.position.x-

    takipmesafe,this.transform.position.y,

    this.transform.position.z),takiphiz*Time.deltaTime);

    21

  • }}

    IEnumerator basla()

    {

    yield return new WaitForSeconds(1.2f);

    flag=true;

    yield return new WaitForSeconds(1f);

    takiphiz=30;

    yield return new WaitForSeconds(0.2f);

    takiphiz=50;

    yield return new WaitForSeconds(0.1f);

    takiphiz=100;

    yield return new WaitForSeconds(0.05f);

    takiphiz=200;

    }

    }

    3.8 Engel Sistemi

    public class engelolus : MonoBehaviour {

    public GameObject karakter;

    public GameObject[] engeller;

    bool flag=true;

    void Start () {

    StartCoroutine(olus());

    }

    void Update () {

    }

    IEnumerator olus()

    {

    yield return new WaitForSeconds(3f);

    int a = Random.Range (0,3);

    22

  • //random olusan degerde engel olustur

    Instantiate(engeller[a],newVector3

    (karakter.transform.position.x+30,-3.5f,

    karakter.transform.position.z),

    Quaternion.identity) ;

    StartCoroutine(olus());

    }

    }

    3.9 arpsma Sistemi

    public class carpmakontrol : MonoBehaviour {

    public GameObject skor;

    int skorpuani=0;

    bool flag=false;

    public AudioClip kedi;

    void Start () {

    skorpuani=0;

    skor.gameObject.GetComponent

    ().text="Skor = 0";

    }

    void Update () {

    if(flag==true)

    GameObject.Find("hero").transform.

    Translate(0,-0.1f,0);

    }

    void OnCollisionEnter2D (Collision2D col)

    {

    if(col.gameObject.tag == "engel")

    {

    AudioSource.PlayClipAtPoint

    (kedi,transform.position);

    23

  • Time.timeScale=0;

    flag=true;

    TweenPosition.Begin(GameObject.Find

    ("yenidenbaslat"),2,new Vector3(0,0.1f,0));

    Debug.Log("carpt");

    }

    }

    void OnTriggerEnter2D (Collider2D col)

    {

    if(col.gameObject.tag == "puan")

    {

    skorpuani++;

    skor.gameObject.GetComponent

    ().text="Skor = "+skorpuani.ToString();

    Debug.Log("puan ald");

    }

    }

    public void yenidenbaslat()

    {

    //uygulamay baslat

    Application.LoadLevel(0);

    }

    public void cikis()

    {

    //uygulamay durdur

    Application.Quit();

    }

    }

    3.10 Skor Sistemi

    //carpmakontrol script i iinde kullanld

    24

  • int skorpuani=0;

    void OnTriggerEnter2D (Collider2D col)

    {

    if(col.gameObject.tag == "puan")

    {

    skorpuani++;

    //Ekrandaki skor textine erisilerek

    sonuna skor puanndaki degisim eklendi

    skor.gameObject.GetComponent

    ().text="Skor = "+skorpuani.ToString();

    Debug.Log("puan ald");

    }

    3.11 Ses Efektleri

    //carpmakontrol scripti iinde kullanld

    public AudioClip kedi;

    //Karakterin engele arptg an

    AudioSource.PlayClipAtPoint(kedi,transform.position);

    3.12 Android SDK

    Unity3d oyun motorunda Android de oyun gelistirmek iin Android SDK nn kurulu

    olmas gerekir.Daha sonrasnda Unity ->Edit->Preferences External Tools yolu izlene-

    rek Android SDK Location ksmndan SDK nn kuruldugu konumun seilmesi gereki-

    yor.BuildSettingsteki Build butonu seilerek oyun APK seklinde masastne kaydedildi.

    Build islemi bitince APK dosyas Android cihaza atlp kuruldu ve oyun test edildi.

    25

  • Sekil 14: Oyun1

    Sekil 15: Oyun2

    26

  • SONULAR

    - Unity3d oyun motorunun arayz bilesenleri ve fonksiyonlar temel anlamda grenildi.

    - Scriptleme mantg gelistirildi.

    - Ngui,parallax,sprite mantg grenildi.

    - Basit bir 2D oyun gelistirildi.

    27

  • Kaynaklar

    [1] http://unity3d.com/

    [2] http://yasirkula.com/

    [3] http://ustaderslik.com/

    28

  • ZGEMIS

    KISISEL BILGILER

    Ad Soyad :Sena SAHIN

    Uyrugu : 51031399618

    Dogum Yeri ve Tarihi:Eskisehir 19.09.1994

    e-mail :[email protected]

    EGITIM DURUMU

    Lisans grenimi : Bilecik Seyh Edebali niverstesi, Bilecik

    Bitirme Yl : 2015

    Lise :Ktahya Fatih Anadolu Lisesi

    IS DENEYIMLERI

    Yl :

    Kurum :

    Stajlar :

    ILGI ALANLARI

    YABANCI DILLER :Ingilizce (Orta)

    29

    ZETTEEKKREKL LSTESGRPROJEDE KULLANILAN ARALARUnity3d Nedir Asset store

    Unity3d Arayz renimiToolbar PaneliHierarchy paneliProject paneliInspector paneliScene(Sahne) paneliGame paneli Console (Konsol) paneli

    GameObject NedirGameObject - component ilikisiComponent - script ilikisi

    Prefab OluturmakDeerlerin Test EdilmesiEbeveyn Atama (Parenting)Kodlama Mekanizmasi(MonoDevelop)Unity FonksiyonlarNGUI Nedir

    PROJENN TASARIMI VE GEREKLETRLMESGrafiklerin Oluturulmas ve Kullanlacak elerin BelirlenmesiNGUI ile Arayz YapmArka Plan SistemiParallax EtkisiKarakter Sistemi Sprite MantKamera SistemiEngel Sistemiarpma SistemiSkor SistemiSes EfektleriAndroid SDK

    SONULARKAYNAKLARZGEM