Collision non détecté sur ANDROID

Toutes les questions sur le développement Mobile, y compris la partie script.
Nathaax
Messages : 4
Inscription : 11 Déc 2014 16:15

Collision non détecté sur ANDROID

Message par Nathaax » 23 Fév 2017 19:03

Salut la communauté :-D

Je suis actuellement en train de developpé un petit jeux, que j'aimerai par la suite publié sur le PLAY STORE. Il est encore en developpement et il est loin d'être terminer.

J'ai un personnage qui lance des objet sur ces ennemies pour les vaincre. Lorsque l'ennemie est vaincu, suite a la collision avec l'objet, un effet apparaît ainsi qu'un nouveau game object qui remplace l'ennemie.
Le jeu fonctionne très bien sur unity, il n'y a aucun problème. Seulement, lorsque j'essaie sur mon téléphone, rien ne se passe. La collision entre mon objet et mes ennemies ne sont plus détecté.

Si quelq'un aurait un petit conseil ou deux à me donner, je suis preneur. C'est la première fois que je developpe sur android, donc je ne suis pas trop calé sur le sujet.

Et le code en question :

Code : Tout sélectionner

 using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour 
{
	public float m_speed = 0.5f;
    public GameObject explosion;
    public GameObject PLS;

    void Start () 
	{
		Destroy (gameObject, 3.0f);
	}

	void Update () 
	{
		transform.position += transform.right * m_speed;
	}

	void OnTriggerEnter2D(Collider2D other)
	{
		if (other.gameObject.tag == "enemy") 
		{
			Destroy(other.gameObject);
			Destroy(gameObject);
            {
                GameObject expl = Instantiate(explosion, transform.position, Quaternion.identity) as GameObject;
                Destroy(gameObject); // destroy the grenade
                Destroy(expl, 1); // delete the explosion after 3 seconds
            }

            {
                GameObject PLlS = Instantiate(PLS, transform.position, Quaternion.identity) as GameObject;
                Destroy(gameObject); // destroy the grenade
                Destroy(PLlS, 3); // delete the explosion after 3 seconds
            }
        }
	}

} 

Merci :super:

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: Collision non détecté sur ANDROID

Message par DevAmat » 24 Fév 2017 05:50

Bon, il y a un truc qui me choque dans ton code

Code : Tout sélectionner

void Update () 
   {
      transform.position += transform.right * m_speed;
   }
Il faudrait que tu multiplies ton déplacement par le temps donc faire:

Code : Tout sélectionner

void Update () 
   {
      transform.position += transform.right * m_speed * Time.deltaTime;
   }
Lien de la doc ici:
https://docs.unity3d.com/ScriptReferenc ... aTime.html

Donc modifie ton code réajuste ta speed et test ta build. En effet si tu ne multiplies pas par le temps entre chaque frame tu auras des comportements différents suivant la puissance de la machine qui fait tourner ton jeu et c'est catastrophique.

Ensuite dans le code que tu montres je ne comprends pas du tout ta syntaxe:

Code : Tout sélectionner

if (other.gameObject.tag == "enemy")
        {
            Destroy(other.gameObject);
            Destroy(gameObject);
            {
                GameObject expl = Instantiate(explosion, transform.position, Quaternion.identity) as GameObject;
                Destroy(gameObject); // destroy the grenade
                Destroy(expl, 1); // delete the explosion after 3 seconds
            }

            {
                GameObject PLlS = Instantiate(PLS, transform.position, Quaternion.identity) as GameObject;
                Destroy(gameObject); // destroy the grenade
                Destroy(PLlS, 3); // delete the explosion after 3 seconds
            }
        }
La logique voudrait que tu fasses ça:

Code : Tout sélectionner

 if (other.gameObject.tag == "enemy")
        {
            Destroy(other.gameObject);
            
            GameObject expl = Instantiate(explosion, transform.position, Quaternion.identity) as GameObject;
            Destroy(expl, 1); // delete the explosion after 3 seconds
            
             GameObject PLlS = Instantiate(PLS, transform.position, Quaternion.identity) as GameObject;
             Destroy(PLlS, 3); // delete the explosion after 3 seconds
                
            Destroy(gameObject); // destroy the grenade
        }
C'est plus clair... Si j'ai bien compris le but te ton code. Parce que ouvrir une accolade après une instruction (Destroy(gameObject)) qui renvoie void pour moi c'est une erreur.

Nathaax
Messages : 4
Inscription : 11 Déc 2014 16:15

Re: Collision non détecté sur ANDROID

Message par Nathaax » 26 Fév 2017 02:13

Salut, merci beaucoup pour ta réponse, et désolé pour la syntaxe, la programmation n'étant vraiment pas mon fort, le code de base à été repris d'un ancien tuto que j'avais fais. Et je voulais le réadapté à ma sauce, d'où le fait que sa paraissent incompréhensible pour quelqu'un qui s'y connait.

Du coup j'ai bien repris ce que tu m'avais dis, seulement cela ne fonctionne toujours pas. Aussi j'ai un deuxième script qui ne fonctionne pas, celui qui est censé mettre fin à la partie.

Ce code :

Code : Tout sélectionner

 using UnityEngine;
using System.Collections;

public class GameOverChecker : MonoBehaviour 
{
	public GameObject m_gameOver;
	private bool m_isOver = false;

	void Start () 
	{

	}

	void Update () 
	{

	}

	void OnTriggerEnter2D(Collider2D other)
	{
		if (other.gameObject.tag == "enemy") 
		{
			if(m_isOver == false)
			{
				m_isOver = true;
				m_gameOver.SetActive(true);
				StartCoroutine("restartGame");
			}
		}
		Destroy (other.gameObject);
	}

	private IEnumerator restartGame()
	{
		yield return new WaitForSeconds (3.0f);
		Application.LoadLevel("main");
		yield return null;
	}
}


Cela viendrai donc des codes ? ou il est possible que j'ai mal configuré autre chose ? Mon téléphone ? ou l'installation du sdk android ? ou autre chose, je ne sais pas. Sachant que il y a d'autres scripts en place qui fonctionne lorsque je le lance avec le téléphone.

Merci :super:

Avatar de l’utilisateur
VaultGuy
Messages : 16
Inscription : 23 Avr 2016 21:54

Re: Collision non détecté sur ANDROID

Message par VaultGuy » 26 Fév 2017 11:39

Bonjour,

Pour vérifier que les collisions se créaient bien, tu peux utiliser Unity Remote, qui permet de lancer le jeu sur Android, tout en ayant accès à l'Inspector d'Unity, et d'autres fonctionnalités.
https://play.google.com/store/apps/deta ... mote&hl=fr

J'ai récemment fait un jeu avec des collisions, et je ne sais pas pourquoi, si le GameObject parent n'était pas activer quand j'exportais mon projet, alors les collisions ne se créaient pas.

Je ne sais pas si ça a rapport avec ton problème.

Nathaax
Messages : 4
Inscription : 11 Déc 2014 16:15

Re: Collision non détecté sur ANDROID

Message par Nathaax » 26 Fév 2017 19:29

D'accord merci, j'ai installé unity remove 5, mais je ne vois rien d'anormal. Que veux tu dire par activer les GameObject parent avant l'exportation ?

alexr1221
Messages : 35
Inscription : 21 Avr 2016 16:21

Re: Collision non détecté sur ANDROID

Message par alexr1221 » 28 Fév 2017 00:28

Ça peut paraître bête mais télécharge une autre version d'unity (le dernier patch). J'ai rencontré de nombreux problèmes qui étaient seulement dus à une "faille" dans unity. Par exemple une fois l'herbe (editeur de terrain) était toute noire (pb avec la transparence) sur certains androids qui avaient un composant en commun.

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »