Comment faire un sprite cliquable?
J'ai googlé beaucoup et qu'vraiment compliqué méthodes de le faire. J'ai aussi trouvé la fonction OnMouseDown() mais je n'ai pas été capable de le faire fonctionner.
Au moment où le sprite s'active lorsque vous appuyez n'importe où sur l'écran.
MODIFIER - Oui, il a une 2d Box collider
Mon code ci-dessous:
using UnityEngine;
using System.Collections;
public class mute : MonoBehaviour {
public bool isMuted = false;
public Sprite mute1; //Drag your first sprite here
public Sprite mute2; //Drag your second sprite here
private SpriteRenderer spriteRenderer;
//Use this for initialization
void Start () {
spriteRenderer = GetComponent<SpriteRenderer>(); //we are accessing the SpriteRenderer that is attached to the Gameobject
if (spriteRenderer.sprite == null) //if the sprite on spriteRenderer is null then
spriteRenderer.sprite = mute1; //set the sprite to sprite1
}
//Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.Mouse0)) {
if(isMuted == false){
AudioListener.pause = true;
AudioListener.volume = 0;
isMuted = true;
ChangeSprite ();
}
else{
AudioListener.pause = false;
AudioListener.volume = 1;
isMuted = false;
ChangeSprite ();
}
}
}
void ChangeSprite ()
{
if (spriteRenderer.sprite == mute1) //if the spriteRenderer sprite = sprite1 then change to sprite2
{
spriteRenderer.sprite = mute2;
}
else
{
spriteRenderer.sprite = mute1; //otherwise change it back to sprite1
}
}
}
Vector3 mousePos = Camera.principal.ScreenToWorldPoint(D'Entrée.mousePosition);
Je vais faire ce changement maintenant, j'espère que c'est ce que mon problème a été.
où pourrais-je l'utiliser? J'ai changé d'Entrée.GetKeyDown (Mot De Code.Mouse0) à l'Entrée.GetMouseButtonDown(0) et il est encore active, peu importe où je clique sur
Désolé, mais si je demande comment faire un "Sprite" cliquables.. pas comment faire la totalité de l'écran cliquable et activer un sprite..
Je vais faire ce changement maintenant, j'espère que c'est ce que mon problème a été.
où pourrais-je l'utiliser? J'ai changé d'Entrée.GetKeyDown (Mot De Code.Mouse0) à l'Entrée.GetMouseButtonDown(0) et il est encore active, peu importe où je clique sur
Désolé, mais si je demande comment faire un "Sprite" cliquables.. pas comment faire la totalité de l'écran cliquable et activer un sprite..
OriginalL'auteur MIke | 2015-01-26
Vous devez vous connecter pour publier un commentaire.
À L'Aide De OnMouseDown
La méthode la plus simple est d'ajouter cette fonction dans n'importe quel composant de script attaché à la gameObject contenant le sprite:
Le gameObject également besoin d'avoir un collisionneur. À la fois en 2D et 3D collisionneurs de travail.
Comparaison à d'autres méthodes
Raycasting ne travaille que sur un collisionneur de type au moment
Physics.Raycast
ne fonctionne que contre la 3D collisionneurs etPhysics2D.Raycast
ne fonctionne que contre les 2D collisionneurs.OnMouseDown
fonctionne sur les deux, mais il est possible que sa performance est aussi mauvais que la performance de l'exécution à la fois de la raycasts.Position à partir des méthodes décrites dans d'autres réponses sont bonnes pour la performance. Couple de
if
états est beaucoup plus rapide à calculer que ray casting, mais ray casting est encore assez rapide pour les scènes basiques. Le désavantage de la position des contrôles, c'est que si vous changer quoi que ce soit (à l'échelle ou la position) que vous êtes susceptible de briser votre si les clauses. Aussi laif
s sont assez compliqué si vous voulez sprites être sur le dessus de chaque autre.Pas de problème. Je viens de réaliser que votre suggestion
OnMouseDown
fonctionne aussi bien. J'ai édité ma réponse. Il est beaucoup mieux parce que cela doit être fait seulement lorsque l'utilisateur a cliqué.Merci beaucoup! Nous avons un gagnant! Je savais qu'il y avait un moyen facile de le faire et vous l'avez trouvé!!! Si j'ai pu vous acheter une bière, je le ferais!
Wow! C'est une excellente réponse! Ne savais pas que c'était facile!
OriginalL'auteur maZZZu
D'abord je pense que vous devriez avoir un collisionneur avec votre gameobject et en cliquant, vous devez utiliser sorte de raycasting. Et vous pouvez utiliser
Input.GetMouseButtonDown (0)
au lieu deInput.GetKeyDown (KeyCode.Mouse0)
J'ai changé mais toujours actiavtes peu importe où je cliquez. toutes les idées simples?
OriginalL'auteur Imtiaj Ahmed
Il n'est pas bizarre qu'il active pas de mater l'endroit où vous cliquez, parce que vous n'êtes pas le limiter à un emplacement spécifique. Droit maintenant, vous êtes juste vérifier
Que vous voulez vérifier si le clic est à l'intérieur d'une certaine zone, ou atteint un certain objet. Donc, vous pouvez limiter par la position actuelle de la souris, vous avez, avec quelque chose comme ça.
Ou vous pouvez utiliser un raycast pour déterminer quel est l'objet qui vous sont actuellement frapper. Qui je voudrais activement des conseils dans à peu près tous les scénarios. Pour en savoir plus sur raycasting, veuillez vérifier la l'unité des tutoriels
OriginalL'auteur MX D
Je ne suis pas 100% sûr de savoir comment l'unité poignées 2D choses par rapport à la 3D de choses, mais je suis assez sûr que le principal de ray-casting est le même, alors essayez quelque chose comme ce qui suit et de le coller sous la mise à jour dans votre script, vous voulez cliqué.
Ce que cela est en train de faire est de vérifier pour voir si la souris est cliqué, la vérification pour voir si la souris cliqué en fait, il y avait quelque chose, et puis de vérifier que ce qui a été cliqué est la chose avec le script.
UnityEngine.Physics' does not contain a definition for
RayCast'Désolé @MIke, j'ai eu Raycast; pas de majuscule à mi-chemin. J'ai changé la réponse maintenant.
oh pas de problème, désolé, je devrait avoir remarqué que.
le bougre, il ne fonctionne pas.. savent pas pourquoi.. ne pose pas toutes les erreurs ne pas activer le sprite à tous maintenant.
Le code a été mis à l'objet que vous essayez de cliquer, et il a un collisionneur de certains description sur elle trop?
OriginalL'auteur Benjamin James Drury
Que j'ai vu dans les commentaires que vous pouvez obtenir la véritable position de contact
J'ai peut-être raté la condition de vérifier xD
L'idée est de vérifier si votre robinet est à l'intérieur d'une fourchette raisonnable où votre sprite doit être. J'ai mis de la plaine numéro là, vous pouvez bien sûr utiliser SpriteRenderer taille x et y taille.
OriginalL'auteur Gounemond