intro aim
This commit is contained in:
@@ -1,22 +1,59 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
// Ten nawias otwiera przestrzeń nazw 'Beyond'
|
||||
namespace Beyond
|
||||
{
|
||||
[RequireComponent(typeof(Renderer))]
|
||||
// Ten nawias otwiera klasę 'Billboard'
|
||||
public class Billboard : MonoBehaviour
|
||||
{
|
||||
void Update()
|
||||
{
|
||||
if (Camera.main)
|
||||
{
|
||||
[Tooltip("Referencja do kamery, w stronę której obiekt ma patrzeć. Jeśli puste, automatycznie użyje Camera.main.")]
|
||||
[SerializeField] private Camera _cameraToLookAt;
|
||||
|
||||
//Vector3 righ = Vector3.Cross(Camera.main.transform.forward, Vector3.up);
|
||||
//transform.rotation = Quaternion.Euler(new Vector3(0f, Camera.main.transform.eulerAngles.y, 0f));
|
||||
transform.rotation = Quaternion.LookRotation(-Camera.main.transform.forward, Vector3.up);
|
||||
[Tooltip("Jak szybko obiekt ma się obracać w stronę kamery. Ustaw na dużą wartość (np. 1000) dla natychmiastowego obrotu.")]
|
||||
[SerializeField] private float _rotationSpeed = 20f;
|
||||
|
||||
[Tooltip("Czy zablokować rotację na osi X, aby obiekt obracał się tylko w poziomie? Przydatne dla sprajtów 2D w świecie 3D.")]
|
||||
[SerializeField] private bool _lockXAxis = false;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
// Jeśli w Inspektorze nie przypisano żadnej kamery, spróbuj znaleźć główną kamerę przy starcie.
|
||||
if (_cameraToLookAt == null)
|
||||
{
|
||||
_cameraToLookAt = Camera.main;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Używamy LateUpdate(), aby mieć pewność, że wykonujemy obrót PO tym,
|
||||
// jak kamera zaktualizowała swoją pozycję i rotację w danej klatce.
|
||||
void LateUpdate()
|
||||
{
|
||||
if (_cameraToLookAt == null)
|
||||
{
|
||||
// Jeśli nadal nie ma kamery (np. główna została wyłączona), nie rób nic.
|
||||
return;
|
||||
}
|
||||
|
||||
// Oblicz docelową rotację
|
||||
Quaternion targetRotation;
|
||||
|
||||
if (_lockXAxis)
|
||||
{
|
||||
// Wersja z zablokowaną osią X (obraca się tylko w lewo/prawo)
|
||||
Vector3 cameraPosition = _cameraToLookAt.transform.position;
|
||||
cameraPosition.y = transform.position.y;
|
||||
targetRotation = Quaternion.LookRotation(transform.position - cameraPosition, Vector3.up);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Wersja pełna (klasyczny billboard)
|
||||
targetRotation = _cameraToLookAt.transform.rotation;
|
||||
}
|
||||
|
||||
// Płynnie interpoluj (Slerp) od aktualnej rotacji do docelowej.
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, _rotationSpeed * Time.deltaTime);
|
||||
}
|
||||
|
||||
} // <-- TEN ZNAK ZAMYKA KLASĘ 'Billboard'
|
||||
|
||||
} // <-- TEN ZNAK ZAMYKA PRZESTRZEŃ NAZW 'Beyond'
|
||||
Reference in New Issue
Block a user