[C#] UI Cursor

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

[C#] UI Cursor

Message par MasterNovice » 03 Fév 2016 23:05

Salut,

Puisque c'est un sujet qui revient relativement souvent, voici un petit script à placer sur un UI Image. Il permet d'en faire un curseur qu'on peut rendre visible / invisible, lock au centre de l'écran et changer facilement. L'utilisation des fonctions est expliqué en commentaire. Le code est assez simple à comprendre pour ne pas m'être donné la peine de le commenter en détail. J'espère qu'il sera utile à certains.

-NOM DU SCRIPT : UICursor

-AUTEUR(S): MasterNovice

-DESCRIPTION : Permet de faire un curseur à partir d'une image, de le centrer au milieu de l'écran, de le masquer ou de le changer à la volée

-UTILISATION : Placer le script sur un UI Image

-SCRIPT :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

#region Commentaires / Explications
/* Petit script qui contrôle un "Curseur UI" pour remplacer le curseur de base
 * Placer le script sur un UI Image
 * Remplissez le tableau de Sprites (UI Cursor Images) si vous changez de cureurs en cours de jeu (exemple : un oeil sur des objets en particulier, une cible sur une cible etc...)
 * Utilisation par script :
 * - GetUiCursorLock() : renvoi true si l'UI Curseur est lock au centre de l'écran
 * - GetUICursorVisible() : renvoi true si l'UI Curseur est visible
 * - SetUICursorLock(bool locked) : Lock et delock l'UI Curseur au centre de l'écran
 * - SetUICursorVisible(bool visible) : rend visible ou invisible l'UI Curseur à l'écran
 * - ChangeUICursor(int numeroSprite = -1) : permet de changer le sprite de l'UI Curseur en fonction de l'index du tableau. 
 * laisser vide pour réinitialiser l'UI Curseur par défaut
*/  
#endregion

public class UICursor : MonoBehaviour {

	#region Attributs
	[SerializeField] private bool uiCursorLocked = false;
	[SerializeField] private Sprite[] uiCursorImages;
	private bool uiCursorVisible = true;
	private Image uiCursorImage;
	private Sprite uiCursorSpritePrincipal;
	#endregion

	#region Unity Fonctions
	// Use this for initialization
	void Start () {
		Cursor.visible = false;
		uiCursorImage = GetComponent<Image> ();
		uiCursorImage.raycastTarget = false;
		uiCursorSpritePrincipal = uiCursorImage.sprite;
	
	}
	
	// Update is called once per frame
	void Update () {

		if(!uiCursorLocked  && uiCursorVisible )
			uiCursorImage.transform.position = Input.mousePosition;

	}

	#endregion

	#region Mes Fonctions
	public bool GetUiCursorLock()
	{
		return uiCursorLocked ;
	}

	public bool GetUICursorVisible()
	{
		return uiCursorVisible;
	}

	public void SetUICursorLock(bool locked)
	{
		if (locked) {
			uiCursorLocked  = true;
			Cursor.lockState = CursorLockMode.Locked;
			GetComponent<RectTransform> ().localPosition = new Vector3 (0, 0, 0);
		} 

		else {
			uiCursorLocked  = false;
			Cursor.lockState = CursorLockMode.None;
		}
	}

	public void SetUICursorVisible(bool visible)
	{
		if (!visible) {
			uiCursorVisible = false;
			uiCursorImage.enabled = false;
		} 

		else {
			uiCursorVisible = true;
			uiCursorImage.enabled = true;
		}
	}

	public void ChangeUICursor(int numeroSprite = -1)
	{
		if (numeroSprite == -1)
			uiCursorImage.sprite = uiCursorSpritePrincipal;
		else
		
			uiCursorImage.sprite = uiCursorImages[numeroSprite];
	}
	#endregion
}
Dernière édition par MasterNovice le 04 Fév 2016 23:48, édité 2 fois.

Avatar de l’utilisateur
stigma
Messages : 1400
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst
Contact :

Re: [C#] UI Cursor

Message par stigma » 04 Fév 2016 12:24

Merci pour le script, mais je n'arrive pas à associer une image. En dessous de "UI Cursor Image", j'ai "Size". Je n'utilise qu'un seul sprite pour mon curseur. Comment dois-je procéder ? Merci

Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

Re: [C#] UI Cursor

Message par MasterNovice » 04 Fév 2016 12:35

Si tu n'utilises qu'une seule image pour ton curseur il n'y a rien à toucher. Tu créer un UI Image avec l'image (bien mettre ta texture en Sprite dans ses paramètres) de ton curseur et tu met le script dessus. Cursor Images est un tableau de sprites. Te suffit d'entrer le nombre de sprites que tu as et d'associer ensuite tes textures.

Avatar de l’utilisateur
stigma
Messages : 1400
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst
Contact :

Re: [C#] UI Cursor

Message par stigma » 04 Fév 2016 19:10

Mon image de curseur est un png 32x32 et je ne peux pas l'utiliser comme Source Image. Je n'ai jamais utilisé de sprite. Dois-je convertir mon image en sprite ?

Avatar de l’utilisateur
MasterNovice
Messages : 610
Inscription : 23 Juil 2011 16:03

Re: [C#] UI Cursor

Message par MasterNovice » 04 Fév 2016 19:27

Dans tes assets tu cliques sur ton image, dans l'importer tu peux changer le type de texture. Tu met simplement en Sprite / UI et tu valide. Après ça tu pourras mettre ton curseur en source image.

http://docs.unity3d.com/Manual/class-Te ... orter.html

Avatar de l’utilisateur
stigma
Messages : 1400
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst
Contact :

Re: [C#] UI Cursor

Message par stigma » 05 Fév 2016 12:35

J'ai réussi à avoir mon curseur à l'écran. Mais j'ai cette erreur à l'éxécution à la ligne 43

Code : Tout sélectionner

uiCursorImage.transform.position = Input.mousePosition;

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [C#] UI Cursor

Message par boubouk50 » 05 Fév 2016 12:40

stigma a écrit :J'ai réussi à avoir mon curseur à l'écran. Mais j'ai cette erreur à l'éxécution à la ligne 43

Code : Tout sélectionner

uiCursorImage.transform.position = Input.mousePosition;
Et c'est quoi la ligne d'erreur console?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
stigma
Messages : 1400
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst
Contact :

Re: [C#] UI Cursor

Message par stigma » 05 Fév 2016 13:56

Code : Tout sélectionner

NullReferenceException: Object reference not set to an instance of an object
UICursor.Update () (at Assets/scripts/UICursor.cs:43)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [C#] UI Cursor

Message par boubouk50 » 05 Fév 2016 14:14

Donc un des éléments est null. Je penche forcément pour uiCursorImage mais dans ce cas il aurait du être signalé au Start (), sauf si ton Component Image est détruit en cours de route...
Input est normalement pris en compte sans problème.

EDIT - C'est peut-être la désactivation sinon dans public void SetUICursorVisible(bool visible)
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
stigma
Messages : 1400
Inscription : 17 Nov 2012 18:29
Localisation : Perdu dans les mondes de Myst
Contact :

Re: [C#] UI Cursor

Message par stigma » 05 Fév 2016 14:36

Voici mes paramètres
Image

PS : L'erreur se répète à chaque frame, donc des centaines de fois en quelques secondes.
Dernière édition par stigma le 05 Fév 2016 14:51, édité 1 fois.

Répondre

Revenir vers « Scripts »