[C#] Camera Layer : cacher des objets à une distance donnée

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
Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

[C#] Camera Layer : cacher des objets à une distance donnée

Message par freepl » 16 Juil 2015 08:15

Bonjour

Dans le but d'optimiser mes maquettes routières, je cherche à commencer à ne voir mes véhicules , par exemple, qu'à partir de 800 m de ma caméra principale.

Je sais utiliser le culing mask mais je ne sais qu' Afficher / Masquer le layer contenant mes véhicules.
Image

Mes véhicules sont dans le layer VEHICULE.

Comment faire pour ne les voir qu'à partir de 800 m ?

Merci

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

Re: Camera :ne pas voir des objets à une distance donnée

Message par boubouk50 » 16 Juil 2015 10:11

Je connais la propriété LayerCullingDistance, mais je ne sais pas s'il est accessible via l'Inspector.
"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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Camera :ne pas voir des objets à une distance donnée

Message par freepl » 16 Juil 2015 14:14

Merci

le code prend les transform de la camera principle ( je l'ai mis dessus) et crée, si j'ai compris" 32 petites distances".
Mais comment affecter une distance à un objet, quelle distance et comment définir cette distance ( exemple 800 m ) ?
En vérifiant l'onglet culing mask , je ne vois rien de plus

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class LayerDistance : MonoBehaviour {
	void Start() {
		Camera camera = GetComponent<Camera>();
		float[] distances = new float[32];
		distances[10] = 15;
		camera.layerCullDistances = distances;
	}
}


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

Re: Camera :ne pas voir des objets à une distance donnée

Message par boubouk50 » 16 Juil 2015 15:09

Tu as copier/coller le code de l'exemple de la doc sans chercher à comprendre, sérieusement. En réfléchissant un petit peu, même sans lire l'explication qui est donnée, ça saute aux yeux.
Tu définis un tableau de 32 cases correspondants aux 32 layers disponibles sur la camera.
distances[10] équivaut à ton layer n°10 (il me semble qu'ils commencent à 0), donc la distance que tu mets dedans vaudra comme la valeur de far clip pour ce layer. Donc tu peux définir un far clip différent pour chaque layer.
camera.layerCullDistances = distances; lui te permet d'assigner ces changements à la caméra. Les cases non-renseignées ne seront pas prises en compte et les layers associés utiliseront le far clip de la caméra.
"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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Camera :ne pas voir des objets à une distance donnée

Message par freepl » 16 Juil 2015 15:47

Non non j ai essayé mais je me suis planté dans la compréhension.

Merci de tes explications

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Camera :ne pas voir des objets à une distance donnée

Message par freepl » 17 Juil 2015 09:29

Bonjour

J'ai bien suivi les directives.
J'ai mes 32 layers.
Celui sur lequel je veux agir est "vehicule"
Image

j'ai bien indiqué le layer 15 et la distance 100m
Mais cela ne fonctionne pas

Code : Tout sélectionner

using UnityEngine;
using System.Collections;



public class LayerDistance : MonoBehaviour {
	void Start() {
		Camera camera = GetComponent<Camera>();
		float[] distances = new float[32];
		distances[15] = 100;
		camera.layerCullDistances = distances;
	}
}

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Camera :ne pas voir des objets à une distance donnée

Message par Titan » 17 Juil 2015 10:00

Je m'en suis servis exactement comme ça il y a quelques mois...
si aucune erreur n'est dans la consoles, 2 erreurs possibles:
- tu a oublié d'attacher ce script à ta camera
- tu a oublié de mettre tes gameObject de véhicules dans ton layer 15
____________________________________________
Hop Boy

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: Camera :ne pas voir des objets à une distance donnée

Message par artemisart » 17 Juil 2015 10:07

Ça commence à 0, donc logiquement le 15ème layer est le layer n°14 : distances[14] = 100;
Afficher le tableau de distances dans l'inspector pourrait être pratique aussi...

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

Re: Camera :ne pas voir des objets à une distance donnée

Message par boubouk50 » 17 Juil 2015 10:13

Les layers aussi commencent à 0 donc logiquement distances[0] est le layer 0, donc distances[15] est le layer 15
"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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Camera :ne pas voir des objets à une distance donnée

Message par freepl » 17 Juil 2015 10:44

J'ai trouvé.

Pour les layers , c'est boubouk50 qui a raison.

Je faisais mes modification de distance dans le script en live, game lancé.
Et par rapport à d'autres scripts, les modif ne sont pas prises en compte.
Il faut à chaque modif de distance, lancer le game pour voir le résultat.

Merci à tous

Répondre

Revenir vers « (C#) CSharp »