IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

changement de direction aléatoire à l'intérieur d'un volume


Sujet :

Unity

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 355
    Points : 0
    Points
    0
    Par défaut changement de direction aléatoire à l'intérieur d'un volume
    bonjour,

    J'ai établi le script suivant qui à chaque appui de la touche I le préfab change aléatoirement de direction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
     
    public class Spawner : MonoBehaviour
    {
    	[Header ("Object properties")]
    	[SerializeField] private float moveSpeed;
    	[SerializeField] private Material material;
     
    	[SerializeField] private GameObject prefabToSpawn;
     
        private GameObject newObject;
     
     
    	private GameObject oldObject;
     
        //public GameObject oldObject;
     
    	private Vector3 objectDirection;
     
     
     
    	 Vector3 scale;
     
     
     
    	float scaleX,scaleY,scaleZ;
        void Start()
    	{
     
    		scale = prefabToSpawn.GetComponent<Transform>().localScale;
     
            scaleX=scale.x;
            scaleY=scale.y;
            scaleZ=scale.z;
     
     
     
     
     
     
     
                      }
    	private void Update ()
    	{
     
    		if (Input.GetKeyDown (KeyCode.I))
    		{
    			newObject = CreateNewObject ();
     
     
     
     
     
    			// Cas particulier : on vient de lancer le jeu et il n'y a pas d'ancien objet.
    			if (oldObject == null)
    			{
    				// On crée le nouveau en (0, 0, 0).
    				newObject.transform.position = Vector3.zero;
    			}
    			else
    			{
    				// Sinon on le crée à la position de l'ancien.
    				newObject.transform.position = oldObject.transform.position;
     
    			}
     
    			// Permute les références des objets et détruit l'ancien.
    			GameObject tempObject = oldObject;
    			oldObject = newObject;
    			newObject = null;
    			Destroy (tempObject);
     
    			// Donne une nouvelle direction à l'objet.
    			objectDirection = GetRandomNormalizedVector ();
    		}
     
    		// Mouvement de l'objet, avec cas particulier du premier.
    		if (oldObject != null)
    		{
    			oldObject.transform.Translate (objectDirection * moveSpeed * Time.deltaTime);
    		}
     
     
    	}
     
    	private GameObject CreateNewObject ()
    	{
     
     
     
    		// Instantiation du prefab.
    		GameObject go = GameObject.Instantiate (prefabToSpawn, transform);
     
    		go.name = "Object - " + Time.frameCount.ToString ("0000");
     
    		// Ajoute le material.
    		go.GetComponent<Renderer> ().material = material;
     
     
            scaleX=scale.x;
            scaleY=scale.y;
            scaleZ=scale.z;
     
            go.transform.localScale = new Vector3(scaleX,scaleY,scaleZ);
     
     
     
     
     
     
    		return go;
    	}
     
    	private Vector3 GetRandomNormalizedVector ()
    	{
    		return Random.onUnitSphere;
    	}
    }
    Comment modifier ce script pour que le prefab change aléatoirement de direction(angle incident pas forcément égal à angle réféchi),non pas à l'appui d'une touche mais dès qu'il atteint la surface d'un volume donné en y restant à l'intérieur?
    à rajouter entre autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public GameObject volume;
    merci de votre aide

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Bonjour,

    Alors selon la forme du volume et de l'objet, ça peut aller du très simple au très compliqué. Mais en gros il faudrait plus d'informations.

    Si c'est une sphère ou un cube, il y a déjà des méthodes toutes faites, soit dans la classe Physics, soit en utilisant simplement les colliders eux-mêmes. Si c'est un cube tu peux même "enfermer" l'objet entre 4 colliders et c'est encore plus facile, mais comme je l'ai dit plus haut, il faut un peu plus d'informations, forme du volume, forme de l'objet, contraintes, etc ...

    Sinon, la gestion de tes objets est bizarre, qu'essayes-tu de faire exactement ? Je pense qu'il est possible de simplifier ça au maximum

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 355
    Points : 0
    Points
    0
    Par défaut
    Ce n'est pas tout à fait cette méthode là :
    https://unity3d.college/2017/07/03/u...sics-in-unity/

    que je recherche car dans celle-ci l'angle réfléchi est égal à l'angle incident

    Une autre méthode déjà faite?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Pourquoi créer un nouvel objet à chaque fois au lieu de juste modifier le mouvement de celui qui existe ?
    Beaucoup de code inutile et perte de performance que de faire ça.
    En plus d'une syntaxe farfelue avec un nombre de saut de lignes et un espacement aléatoires un peu partout.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [Google Maps] Itinéraires et icônes changement de direction
    Par wehtam dans le forum APIs Google
    Réponses: 1
    Dernier message: 02/03/2013, 11h43
  2. [Débutant] suppression d'un changement de direction
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/02/2012, 21h42
  3. Réponses: 2
    Dernier message: 21/09/2009, 15h36
  4. Réponses: 0
    Dernier message: 17/09/2009, 21h16
  5. Changement de direction
    Par bim92i dans le forum Emploi
    Réponses: 4
    Dernier message: 06/02/2009, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo