Unity'de Portal Sistemi Oluşturma
Portallar birçok oyunda popüler bir özelliktir ve oyuncuların farklı konumlar arasında sorunsuz bir şekilde ışınlanmalarını sağlar. Bu eğitimde, Unity'de bir portal sistemi oluşturmak için çeşitli teknikleri inceleyeceğiz. Temel ışınlanmayı, görsel portallar için render dokularını kullanmayı ve oyuncu yönelimini ve momentumunu koruyan portal mekaniklerini uygulamayı ele alacağız.
Projenin Kurulumu
Başlamak için basit bir Unity projesi kuralım:
- Yeni bir Unity projesi oluşturun.
- Scriptlerimizi organize etmek için
Scripts
adında yeni bir klasör ekleyelim. - Bir oyuncu karakteri ve iki portal nesnesi de dahil olmak üzere birkaç temel nesneyle yeni bir 3B sahne oluşturun.
Temel Işınlanma
Portal sistemlerinin en basit hali, oyuncunun anında bir yerden başka bir yere hareket ettiği temel ışınlanmadır.
Teleportasyon Komut Dosyası Oluşturma
using UnityEngine;
public class TeleportationPortal : MonoBehaviour
{
public Transform destination;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
other.transform.position = destination.position;
other.transform.rotation = destination.rotation;
}
}
}
Bu betiği her iki portal nesnesine ekleyin ve hedefi ilgili portala atayın.
Görsel Portallar için Render Dokularını Kullanma
Daha sürükleyici bir portal sistemi yaratmak için, portalın diğer tarafında ne olduğunu göstermek amacıyla render dokularını kullanabiliriz.
Render Dokularını Ayarlama
- Proje penceresine sağ tıklayıp
Oluştur > Render Dokusu
seçeneğini seçerek yeni bir Render Dokusu oluşturun. - İkinci bir Render Dokusu oluşturmak için bunu tekrarlayın.
- Sahnede her portal için bir tane olmak üzere iki yeni kamera oluşturun ve her kameraya bir Render Dokusu atayın.
- Kameraların konumlarını portalların hedefleriyle eşleşecek şekilde ayarlayın.
Render Dokularını Uygulama
using UnityEngine;
public class Portal : MonoBehaviour
{
public Camera portalCamera;
public Material portalMaterial;
void Start()
{
portalMaterial.mainTexture = portalCamera.targetTexture;
}
}
Bu betiği her portala ekleyin ve Render Texture ile ilgili portal kamerasını ve malzemesini atayın.
Oyuncu Oryantasyonunu ve Momentumunu Koruma
Portal sistemini daha gerçekçi kılmak için oyuncunun portaldan geçerkenki yönelimini ve momentumunu korumamız gerekiyor.
Gelişmiş Işınlanma Komut Dosyası
using UnityEngine;
public class EnhancedPortal : MonoBehaviour
{
public Transform destination;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
CharacterController playerController = other.GetComponent();
Rigidbody playerRigidbody = other.GetComponent();
// Disable the CharacterController to allow manual position and rotation updates
if (playerController != null)
{
playerController.enabled = false;
}
// Maintain orientation
Vector3 relativePosition = destination.InverseTransformPoint(other.transform.position);
other.transform.position = destination.TransformPoint(relativePosition);
// Maintain momentum
if (playerRigidbody != null)
{
Vector3 relativeVelocity = destination.InverseTransformDirection(playerRigidbody.velocity);
playerRigidbody.velocity = destination.TransformDirection(relativeVelocity);
}
// Re-enable the CharacterController
if (playerController != null)
{
playerController.enabled = true;
}
}
}
}
Bu scripti her portala ekleyin ve karşılık gelen hedefi atayın.
Portal Sisteminin Test Edilmesi
Portal sistemini test etmek için şu adımları izleyin:
- Oyuncu karakterini portallardan birinin yakınına yerleştir.
- Oyunu çalıştırmak için
Oynat
tuşuna basın. - Oyuncu karakterini portala taşıyın ve ışınlanma ve görsel efektleri gözlemleyin.
Çözüm
Unity'de bir portal sistemi oluşturmak için çeşitli teknikleri inceledik. Temel ışınlanmayla başladık, render dokularını kullanarak görsel portallar ekledik ve oyuncu yönelimini ve momentumunu korumak için sistemi geliştirdik. Bu kavramlar daha da genişletilebilir ve belirli oyun projenizin ihtiyaçlarına uyacak şekilde özelleştirilebilir.