Pertanyaan ini tampaknya agak populer, tetapi tidak ada pencarian saya yang muncul untuk menyelesaikan masalah saya.

Saya memiliki menara, yang membangun sendiri blok demi blok. Saya ingin memiliki kamera, berputar-putar di sekitar blok bangunan saat ini, dan ketika blok berikutnya akan ditempatkan, terjemahkan kamera secara vertikal, atau ke arah mana pun yang diperlukan, jadi pusat rotasi (dalam ruang 3D) selalu seperti itu kubus.

Saat ini saya memiliki kode ini, tetapi setelah beberapa blok, itu tidak mempertahankan sudut pandangnya saat ini dan gerakannya hanya lompatan besar. Perhatikan bahwa posisi berubah 1 ke segala arah.

Berikut kodenya:

transform.position = targetPosition + (transform.position - targetPosition).normalized * orbitDistance;
transform.RotateAround(targetPosition, Vector3.up, orbitSpeed * Time.deltaTime);

Apa yang saya lakukan salah?

0
Trabefi 7 Juli 2020, 19:20

1 menjawab

Jawaban Terbaik

Saya akan menggunakan teknik booming kamera di sini.

Pertama, memiliki objek game yang mewakili "titik fokus" kamera, titik yang selalu menghadap dan berputar di sekitar kamera. Sebut saja Focus Point. Kemudian, miliki anak Focus Point yang akan menampung komponen kamera. Sebut saja Camera. Mereka akan memiliki hubungan ini.:

├──Focus Point
│   └── Camera

Gameobject Camera harus diputar dan diposisikan sehingga menghadap ke posisi Focus Point. Ini tidak perlu dilakukan dalam kode, karena yang Anda lakukan hanyalah mengubah rotasi dan posisi Focus Point untuk menyesuaikan kamera. Skrip seperti ini dapat dilampirkan ke Focus Point:

public class FocusPointScript : MonoBehaviour 
{ 
    public Vector3 targetPosition;
    public float translateSpeed = 0.1f;
    public float rotateSpeed = 10f;

    void Start()
    {
        targetPosition = transform.position;
    }
  
    void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, 
                translateSpeed * Time.deltaTime);
        transform.Rotate(0f, rotateSpeed * Time.deltaTime, 0f);
    }
}

Dan jika Anda ingin menyesuaikan seberapa jauh kamera dari titik fokus, Anda dapat mengubah posisi Camera maju atau mundur atau (saya tidak akan melakukan keduanya) mengubah localScale dari Focus Point:

float moveDelta = 0f; 
// calculate how to adjust
cameraGameObject.transform.Translate(moveDelta * Vector3.forward);

atau

float scaleFactor = 1f; 
// calculate how to adjust
focusPointGameObject.transform.localScale = 
        scaleFactor * focusPointGameObject.transform.localScale;
2
Ruzihm 7 Juli 2020, 16:36