[RESOLU][DB-AL] Unity 2D-Viseur arme semi-fonctionnel

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

[RESOLU][DB-AL] Unity 2D-Viseur arme semi-fonctionnel

Message par damien-max » 27 Août 2018 23:13

Bonjour,

Je suis entrain de porter mon jeu sur android, et je souhaite que lorsque l'on touche l'écran, l'arme pointe l'endroit et tire. Ceci est chose faite.

Le problème, c'est que cela s'applique à tous l'écran, et j'aimerais faire une "zone morte", c'est à dire que lorsque l'on souhaite déplacer le personnage et que l'on bouge le joystick, l'arme ne se mette pas à tirer dans la direction du joystick. Voici à quoi ressemble l'interface (elle est encore en développement): https://drive.google.com/open?id=1jJ9IR ... EHxKLBgwYj

En gros, la zone rouge est ce que j'appelle la "zone morte". La zone verte et celle où l'on peut appuier pour tirer.

Voici également le script du curseur:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class MousePositionCursor : MonoBehaviour{

    Vector3 posMouse;
	public bool useController;
	public static Weapon weapon;
    // Use this for initialization
    void Awake()
    {

    }

    // Update is called once per frame
    void Update()
    {
		if (!useController)
	        posMouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
	        posMouse.z = 0;
	        gameObject.transform.position = posMouse;
    

	if (useController) {
		Vector2 playerDirection = Vector3.right * Input.GetAxisRaw ("RHorizontal");
	if (playerDirection.sqrMagnitude > 0.0f) {
			transform.rotation = Quaternion.LookRotation(playerDirection, Vector3.up);
		}
			if (Input.GetKeyDown (KeyCode.Joystick1Button10))
				weapon.Shoot ();
	}
}
}
Encore merci à vous pour votre aide et votre soutient :)

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

Re: [DB-AL] Unity 2D-Viseur arme semi-fonctionnel

Message par boubouk50 » 28 Août 2018 09:02

Salut,
il existe le booléen EventSystem.IsPointerOverGameObject qui te permet de savoir si tu cliques sur un élément d'UI.
Egalement, tu pourrais tester au niveau du touch, sur quel élément tu cliques et ne pas tirer. Définir les éléments où tu ne tires pas par un tag qui servirait de condition, par exemple.
"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

damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

Re: [DB-AL] Unity 2D-Viseur arme semi-fonctionnel

Message par damien-max » 28 Août 2018 12:35

boubouk50 a écrit :
28 Août 2018 09:02
Salut,
il existe le booléen EventSystem.IsPointerOverGameObject qui te permet de savoir si tu cliques sur un élément d'UI.
Egalement, tu pourrais tester au niveau du touch, sur quel élément tu cliques et ne pas tirer. Définir les éléments où tu ne tires pas par un tag qui servirait de condition, par exemple.
D'accord, je test cela et je vous tient au courant. Merci !

damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

Re: [DB-AL] Unity 2D-Viseur arme semi-fonctionnel

Message par damien-max » 29 Août 2018 18:41

J'ai refait le systeme de tir, et c'est maintenant l'arme qui sert de repaire de tir. J'ai changé les valeurs de souris sur touch, et mis un systeme en fonction de la position par rapport à l'écran. L'arme ne tire plus, et je peux manier les controles. Tout marche superbement! voici le code que j'ai utilisé:

Code : Tout sélectionner

using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Experimental.UIElements;

public class Weapon : MonoBehaviour {

	public float FireRate = 0;
	public float Damage = 10;
	public LayerMask whatToHit;

	public Transform BulletTrailPrefab;
	public Transform MuzzleFlashPrefab;
	float timeToSpawnEffet = 0;
	public float effectSpawnRate = 10;
	public float screenHeight;

	float timeToFire = 0;
	Transform firePoint;

	// Use this for initialization
	void Awake () {
		firePoint = transform.Find ("FirePoint");
		if (firePoint == null) {
			Debug.LogError ("Pas de firepoint? WHAT?!");

		}
	}

	AudioSource audio;

	void Start () {
		audio = GetComponent<AudioSource>();
		screenHeight = Screen.height;
	}
	// Update is called once per frame
	void Update () {

		if (Input.touchCount >0) {

			if (Input.GetTouch (0).position.y < screenHeight / 2) {
			Debug.Log ("Pas de tir");
		}
	
		else {
			if (FireRate == 0) {
				if (Input.GetTouch (0).position.y > screenHeight / 2) {
					Shoot ();
				}
			}
		
			else{
				if (Input.GetTouch (0).position.y > screenHeight / 2 && Time.time > timeToFire)  {
				timeToFire = Time.time + 1/FireRate;
				Shoot();
				audio.Play ();
			}
		}
	}
}
}

	public void Shoot () {

		Vector2 mousePosition = new Vector2 (Camera.main.ScreenToWorldPoint (Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y) ;
		Vector2 firePointPosition = new Vector2 (firePoint.position.x, firePoint.position.y);
		RaycastHit2D hit = Physics2D.Raycast (firePointPosition, mousePosition - firePointPosition, 100, whatToHit);
		if (Time.time >= timeToSpawnEffet) {
			Effect ();
			timeToSpawnEffet = Time.time + 1 / effectSpawnRate;
		}
		Debug.DrawLine (firePointPosition, (mousePosition-firePointPosition)*100, Color.black);
		if (hit.collider != null) {
			Debug.DrawLine (firePointPosition, hit.point, Color.red);
			//Debug.Log ("Tu a touché " + hit.collider.name + " et inffligé " + Damage + " dégats!");
		}
	}

	void Effect () {
		Instantiate (BulletTrailPrefab, firePoint.position, firePoint.rotation);
		Transform clone = Instantiate (MuzzleFlashPrefab, firePoint.position, firePoint.rotation) as Transform;
		clone.parent = firePoint;
		float size = Random.Range (3f, 3.9f);
		clone.localScale = new Vector3 (size, size, size);
		Destroy (clone.gameObject, 0.02f);
	}
}
Merci de votre aide! :)

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Unity 2D-Viseur arme semi-fonctionnel

Message par Max » 29 Août 2018 19:06

Du coup si tu es arrivé à tes fins, n'hésite pas à passer le sujet en RESOLU (édition du titre du message initial).
Merci.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »