Tworzenie systemu portalowego w Unity
Portale są popularną funkcją w wielu grach, umożliwiającą graczom bezproblemową teleportację między różnymi lokalizacjami. W tym samouczku przyjrzymy się różnym technikom tworzenia systemu portali w Unity. Omówimy podstawową teleportację, używanie tekstur renderowania dla portali wizualnych i implementację mechanizmów portali, które utrzymują orientację i pęd gracza.
Konfigurowanie projektu
Na początek skonfigurujmy podstawowy projekt Unity:
- Utwórz nowy projekt Unity.
- Dodaj nowy folder o nazwie
Scripts
, aby uporządkować nasze skrypty. - Utwórz nową scenę 3D zawierającą kilka podstawowych obiektów, w tym postać gracza i dwa obiekty portalu.
Podstawowa teleportacja
Najprostszą formą systemu portali jest podstawowa teleportacja, dzięki której gracz natychmiast przenosi się z jednego miejsca do drugiego.
Tworzenie skryptu teleportacji
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;
}
}
}
Dołącz ten skrypt do obu obiektów portalu i przypisz miejsce docelowe do odpowiedniego portalu.
Korzystanie z tekstur renderowania dla portali wizualnych
Aby stworzyć bardziej wciągający system portalu, możemy użyć tekstur renderowania, by pokazać, co znajduje się po drugiej stronie portalu.
Konfigurowanie tekstur renderowania
- Utwórz nową teksturę renderowania, klikając prawym przyciskiem myszy w oknie projektu i wybierając
Utwórz > Tekstura renderowania
. - Powtórz tę czynność, aby utworzyć drugą teksturę renderowania.
- Utwórz dwie nowe kamery w scenie, po jednej dla każdego portalu, i przypisz każdej kamerze teksturę renderowania.
- Ustaw pozycje kamer tak, aby odpowiadały celom portali.
Stosowanie tekstur renderowania
using UnityEngine;
public class Portal : MonoBehaviour
{
public Camera portalCamera;
public Material portalMaterial;
void Start()
{
portalMaterial.mainTexture = portalCamera.targetTexture;
}
}
Dołącz ten skrypt do każdego portalu i przypisz odpowiednią kamerę i materiał portalu za pomocą tekstury renderowania.
Utrzymywanie orientacji i dynamiki gracza
Aby system portali był bardziej realistyczny, musimy zachować orientację i pęd gracza, gdy przechodzi przez portal.
Ulepszony skrypt teleportacji
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;
}
}
}
}
Dołącz ten skrypt do każdego portalu i przypisz odpowiednie miejsce docelowe.
Testowanie systemu portalu
Aby przetestować system portalu, wykonaj następujące kroki:
- Umieść postać gracza w pobliżu jednego z portali.
- Naciśnij
Play
, aby uruchomić grę. - Przesuń postać gracza do portalu i obserwuj teleportację oraz efekty wizualne.
Wniosek
Przeanalizowaliśmy różne techniki tworzenia systemu portali w Unity. Zaczęliśmy od podstawowej teleportacji, dodaliśmy portale wizualne za pomocą tekstur renderowania i udoskonaliliśmy system, aby utrzymać orientację i pęd gracza. Koncepcje te można dalej rozwijać i dostosowywać do potrzeb konkretnego projektu gry.