Unity - Minimap dengan Icon (Part 3)

April 25, 2018 in #Coding #Unity | | | Share on Google+

Pada tutorial kemarin, kita berhasil membuat minimap dengan icon-icon yang menampilkan representasi dari bentuk sebenarnya di dunia nyata. Kali ini, kita akan berikan kemampuan untuk membuat icon yang selalu terlihat di dalam minimap. Hal ini digunakan untuk menunjukkan lokasi-lokasi penting, misalnya main-quest.

Hasil akhir dari tutorial ini adalah seperti gambar di bawah. Icon lingkaran biru dan kuning menunjukkan posisi dan arah dari (pura-puranya) main-quest dan side-quest.



Persiapan

Seperti cara kemarin, buatlah Canvas dengan RenderMode = World. Di dalamnya, berikan Image dengan Sprite yang kamu miliki.

Coding

Supaya tertampilkan, kita perlu mengetahui jarak terjauh yang bisa dijangkau oleh kamera. Informasi itu bisa kita ambil dari property size milik MinimapCamera. Kemudian, kita posisikan icon agar tidak lebih dari nilai tersebut.

// Filename : WorldPointIcon.cs

using UnityEngine;

public class WorldPointIcon : MonoBehaviour  
{
    public Transform TargetPosition;
    public float MaximumDistanceToPlayer = 2;
    private Transform _minimapCameraTransform;
    private Camera _minimapCamera;
    private Transform _playerTransform;

    private void Update()
    {
        CalculatePositionOnMinimap();
    }

    private void Start()
    {
        _minimapCameraTransform = GameObject.FindGameObjectWithTag("MinimapCamera").transform;
        _minimapCamera          = _minimapCameraTransform.GetComponent<Camera>();
        _playerTransform        = GameObject.FindGameObjectWithTag("Player").transform;
    }


    public void CalculatePositionOnMinimap()
    {
        float   cameraSize      = _minimapCamera.orthographicSize;
        
        // posisi awal adalah posisi target sebenarnya
        Vector3 clampedPosition = TargetPosition.position;
        
        // jarak posisi dengan karakter
        float distance          = Vector3.Distance(TargetPosition.position,_playerTransform.position);

        // apakah posisi ada di luar batas pandang minimap?
        if (distance > cameraSize-1)
        {
            // jika iya, pindahkan posisinya ke dekat ujung minimap
            Vector3 dir     = (TargetPosition.position - _playerTransform.position).normalized;
            clampedPosition = _playerTransform.position + (dir * (cameraSize-MaximumDistanceToPlayer));

        }
        clampedPosition.y  = 0;
        transform.position = clampedPosition;

    }
}


Hasil Akhir

Gambar di bawah adalah hasil di dalam scene. Icon minimap tidak akan pernah lebih dari camera size minimap dan akan mengikuti kemanapun karakter pergi. Posisi asli dari objek yang mereka representasikan sebenarnya ada di ujung atas dan bawah (lihat warna).

Download Source Code

Source code dapat didownload di sini (unitypackage), atau full version dari tutorial pertama.

April 25, 2018 in #Coding #Unity | | | Share on Google+