2015-Sena Şahin - Unity3D Ve C# Ile Oyun Geliştirme
-
Upload
murat-oezalp -
Category
Documents
-
view
97 -
download
10
description
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