J'ai trouvé un script pour une boussole avec des icones de quêtes. ça marche plutôt bien. Le tuto montrait comment mettre des images sur la boussole qui indiquent où trouver les objets.
Lien du tuto en question : https://youtu.be/MRAVwaGrmrk
J'ai un peu modifié pour mettre les noms des endroits sur la carte, mais je veux juste afficher ces images de noms en dessous de la barre principale.
Voici le code. Je ne suis pas trop doué en C#. Je suppose qu'il faut agir sur la ligne
Code : Tout sélectionner
marker.image.rectTransform.anchoredPosition = GetPosOnCompass(marker);
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Compass : MonoBehaviour
{
public GameObject iconPrefab;
List<QuestMarker> questMarkers = new List<QuestMarker>();
public RawImage compassImage;
public Transform FirstPersonController;
public float maxDistance = 2000f;
float compassUnit;
public QuestMarker lac;
public QuestMarker refuge;
public QuestMarker plage;
public QuestMarker marais;
public QuestMarker caverne;
private void Start()
{
compassUnit = compassImage.rectTransform.rect.width / 360f;
AddQuestMarker(lac);
AddQuestMarker(refuge);
AddQuestMarker(plage);
AddQuestMarker(marais);
AddQuestMarker(caverne);
}
private void Update()
{
compassImage.uvRect = new Rect(FirstPersonController.localEulerAngles.y / 360f, 0f, 1f, 1f);
foreach (QuestMarker marker in questMarkers)
{
marker.image.rectTransform.anchoredPosition = GetPosOnCompass(marker);
float dst = Vector2.Distance(new Vector2(FirstPersonController.transform.position.x, FirstPersonController.transform.position.z), marker.position);
float scale = 0f;
if (dst < maxDistance)
scale = 1f - (dst / maxDistance);
marker.image.rectTransform.localScale = Vector3.one * scale;
}
}
public void AddQuestMarker (QuestMarker marker)
{
GameObject newMarker = Instantiate(iconPrefab, compassImage.transform);
marker.image = newMarker.GetComponent<Image>();
marker.image.sprite = marker.icon;
questMarkers.Add(marker);
}
Vector2 GetPosOnCompass (QuestMarker marker)
{
Vector2 playerPos = new Vector2(FirstPersonController.transform.position.x, FirstPersonController.transform.position.z);
Vector2 playerFwd = new Vector2(FirstPersonController.transform.forward.x, FirstPersonController.transform.forward.z);
float angle = Vector2.SignedAngle(marker.position - playerPos, playerFwd);
return new Vector2(compassUnit * angle, 0f);
}
}
Code : Tout sélectionner
using UnityEngine;
using UnityEngine.UI;
public class QuestMarker : MonoBehaviour
{
public Sprite icon;
public Image image;
public Vector2 position
{
get { return new Vector2(transform.position.x, transform.position.z); }
}
}