Dijital Oyun Programlama Vize Projesi
Proje İçeriği
Unity ile 3D bir oyun geliştirilmiştir. Oyun, bir karakterin engellerden kaçınarak hedefe ulaşmaya çalıştığı bir yapıya sahiptir. Oyuncu, karakteri yönlendirmek için klavye kontrollerini kullanır ve hedefe ulaşmak için engellerden kaçınmalıdır.
Proje, Unity oyun motoru kullanılarak geliştirilmiştir. Oyunun temel özellikleri şunlardır:
- Karakter Kontrolü: Oyuncu, karakteri yönlendirmek için klavye kontrollerini kullanır.
- Engeller: Oyuncunun kaçınması gereken engeller bulunmaktadır.
- Hedef: Oyuncunun ulaşması gereken bir hedef bulunmaktadır.
- Ses Efektleri: Oyun sırasında ses efektleri eklenmiştir.
Oyuncu Kontrolü
PlayerController.cs
1using System;
2using System.Collections;
3using System.IO;
4using System.Threading;
5using UnityEditor.SearchService;
6using UnityEngine;
7using UnityEngine.SceneManagement;
8using UnityEngine.UI;
9
10public class PlayerController : MonoBehaviour
11{
12 public float moveForce = 10f;
13 private Rigidbody rb;
14 public GameObject zemin;
15 public Text WinLoseText;
16 public Text scoreText;
17 private int score = 0;
18 public AudioSource audioSource;
19 public AudioClip coinSound;
20 public AudioClip wallSound;
21 public AudioClip winSound;
22
23 void Start()
24 {
25 rb = GetComponent<Rigidbody>();
26 WinLoseText.gameObject.SetActive(false);
27
28
29 }
30 void FixedUpdate()
31 {
32 float horizontalInput = Input.GetAxis("Horizontal");
33 float verticalInput = Input.GetAxis("Vertical");
34
35 Vector3 force = new Vector3(horizontalInput, 0f, verticalInput) * moveForce;
36
37 rb.AddForce(force);
38 if (rb.position.y < 0f)
39 {
40 WinLoseText.gameObject.SetActive(true);
41 WinLoseText.color = Color.red;
42 WinLoseText.text = "Kaybettin!";
43 audioSource.PlayOneShot(wallSound);
44 Time.timeScale = 0;
45 }
46
47 }
48 void Update()
49 {
50
51 }
52
53 void OnCollisionEnter(Collision collision)
54 {
55 if (collision.gameObject.CompareTag("Engel"))
56 {
57 Debug.Log("Engel ile çarpıştım");
58 audioSource.PlayOneShot(wallSound);
59 WinLoseText.gameObject.SetActive(true);
60 WinLoseText.color = Color.red;
61 WinLoseText.text = "Kaybettin!";
62 Time.timeScale = 0;
63
64 }
65 if (collision.gameObject.CompareTag("Finish"))
66 {
67 WinLoseText.gameObject.SetActive(true);
68 audioSource.PlayOneShot(winSound);
69 WinLoseText.color = Color.green;
70 WinLoseText.text = "Kazandın!";
71 Time.timeScale = 0;
72 }
73 }
74
75
76 void OnTriggerEnter(Collider other)
77 {
78
79 if (other.gameObject.CompareTag("Coin"))
80 {
81 audioSource.PlayOneShot(coinSound);
82 score += 1;
83 scoreText.text = "Skor: " + score.ToString();
84 Destroy(other.gameObject);
85 }
86 }
87
88}
89
Kamera Kontrolü
CameraController.cs
1using UnityEngine;
2
3public class CameraController : MonoBehaviour
4{
5
6 public GameObject player;
7 public Vector3 offset;
8 void Start()
9 {
10 offset=transform.position-player.transform.position;
11 }
12
13
14 void Update()
15 {
16 transform.position=player.transform.position+offset;
17 }
18}
19
Skor (Coin) Kontrolü
CoinController.cs
1using UnityEngine;
2
3public class CoinController : MonoBehaviour
4{
5 void Start()
6 {
7
8 }
9 void Update()
10 {
11 transform.Rotate(0, 100 * Time.deltaTime, 0);
12 }
13
14}
15
Hareketli Engel Kontrolü
ObstacleAction.cs
1using System.Collections;
2using UnityEngine;
3
4public class ObstacleAction : MonoBehaviour
5{
6 public float hiz,hareketLimit,kapanisBeklemeSuresi,acilisBeklemeSuresi;
7 private Vector3 baslangic,bitis;
8 public Yonler yon;
9 bool hareket=true;
10 string durum="kapanıyor";
11
12 void Start()
13 {
14 baslangic=transform.position; // hareketin başlangıç noktası nesneyi koyduğumuz yer
15 if(yon==Yonler.dikey) // hareketin yönüne göre bitiş noktası belirlenir
16 bitis=baslangic+new Vector3(0,hareketLimit,0);
17 else if(yon==Yonler.yatay)
18 bitis=baslangic+new Vector3(hareketLimit,0,0);
19 else if(yon==Yonler.derinlik)
20 bitis=baslangic+new Vector3(0,0,hareketLimit);
21
22 }
23
24 void Update()
25 {
26 if(hareket) // hareket true ise hareket devam eder
27 {
28 if(yon==Yonler.yatay) // hareketin yönüne göre hareket devam eder
29 {
30 transform.position=Vector3.MoveTowards(transform.position,bitis,hiz*Time.deltaTime);
31 } //MoveTowards iki nokta arasında hareket etmeyi sağlar. Normalde manuel kontrol etmekten daha kolay.
32 else if(yon==Yonler.dikey)
33 {
34 transform.position=Vector3.MoveTowards(transform.position,bitis,hiz*Time.deltaTime);
35 }
36 else if(yon==Yonler.derinlik)
37 {
38 transform.position=Vector3.MoveTowards(transform.position,bitis,hiz*Time.deltaTime);
39 }
40
41
42 }
43
44 if(transform.position==bitis) // nesne bitiş noktasına ulaştığında hareket durur ve durum değişir
45 {
46 hareket=false;
47 bitis=baslangic; // bitiş noktası başlangıç noktası olur
48 baslangic=transform.position; // başlangıç noktası nesnenin bulunduğu yer olur
49
50 if(durum=="kapanıyor") // durum kapanıyorsa açılır duruma geçer ve bekleme süresi kadar bekler
51 {
52 durum="aciliyor";
53 StartCoroutine(bekle(kapanisBeklemeSuresi));
54 }
55 else if(durum=="aciliyor") // durum açılıyorsa kapanır duruma geçer ve bekleme süresi kadar bekler
56 {
57 durum="kapanıyor";
58 StartCoroutine(bekle(acilisBeklemeSuresi));
59 }
60
61 }
62
63 }
64 //IEnumerator fonksiyonları belirli bir süre beklemek için kullanılır
65 IEnumerator bekle(float sure){ // bekleme süresi kadar bekler ve hareketi true yapar
66 yield return new WaitForSeconds(sure); // sure kadar bekler
67 hareket=true; // hareketi true yapar, başlatır.
68 }
69
70}
71public enum Yonler{ // hareketin yönlerini tanımlamak için enum (değerlerin listesi) kullandık
72 yatay,
73 dikey,
74 derinlik
75 }
Pendulum ve Dönme Dolap Kontrolü
Rotator.cs
1
2using UnityEngine;
3
4public class Rotator : MonoBehaviour
5{
6 public float speed = 3f;
7
8
9 // Update is called once per frame
10 void Update()
11 {
12 transform.Rotate(0f, 0f, speed * Time.deltaTime / 0.01f, Space.Self);
13 }
14}
15