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

Oyun Videosu