Empecher un objet de sortir du champ de vision de la camera

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Elriks
Messages : 106
Inscription : 02 Oct 2011 08:28

Empecher un objet de sortir du champ de vision de la camera

Message par Elriks » 28 Jan 2012 12:19

Bonjour,

j'ai associé un script de tremblement a des objets sur une scene 2D avec vu du dessus mais , chose inévitable, des objets finissent toujours par atteindre un des rebords et sortir du champ de vision.

Quelqu'un aurait t'il une idée pour créer une limite aux mouvements des objets ?

Merci


Elriks
Messages : 106
Inscription : 02 Oct 2011 08:28

Re: Empecher un objet de sortir du champ de vision de la cam

Message par Elriks » 28 Jan 2012 13:58

J'ai repris un code vu sur formation facile, j'ai tenté de le transformer en C# mais malgré l'absence d'erreur dans ma trad, j'ai aucune réaction des balles. Sinon en l'état, il fonctionne

Code : Tout sélectionner

var tremblement : Vector3;	 
var positionInitiale : Vector3;		
var diametre = 0.35;		
var target : Vector3;			 
static var on = true; 

function Update () 
{

    if (on == true)
    {
    positionInitiale.x = transform.position.x;	
    positionInitiale.y = transform.position.y;	
    positionInitiale.z = transform.position.z;


    transform.position.x=positionInitiale.x+tremblement.x;	   
    transform.position.y=positionInitiale.y+tremblement.y;	   
    transform.position.z=positionInitiale.z+tremblement.z;
    
       if(tremblement.magnitude<=target.magnitude+0.1 && tremblement.magnitude>=target.magnitude-0.1)
        {      
        target = Random.insideUnitSphere * diametre;		
        }

    tremblement.x = Mathf.SmoothStep (tremblement.x, target.x, Time.deltaTime*200);	   
    tremblement.y = Mathf.SmoothStep (tremblement.y, target.y, Time.deltaTime*200);	   
    tremblement.z = Mathf.SmoothStep (tremblement.z, target.z, Time.deltaTime*200);
    }
}
    

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Empecher un objet de sortir du champ de vision de la cam

Message par cayou66 » 28 Jan 2012 16:07

Tu peux faire en sorte de pas dépasser une limite, de plusieurs manières.

Par exemple en lui empêchant carrément de franchir une valeur limite en utilisant Mathf.Max ou Mathf.Min.

Sinon en améliorant le code, il faudrait pouvoir lui "indiquer" une préférence de direction, et donc de détecter les zones limites pour l'amener pendant un certains temps vers le centre de la zone.

En dernier lieu, tu peux mettre des colliders transparents autour de ta zone, et les empêcher physiquement de sortir.

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

Re: Empecher un objet de sortir du champ de vision de la cam

Message par artemisart » 28 Jan 2012 16:44

Comme le script de formation facile est un peu merdique (et pas super logique), j'en ai refait un entièrement en C#, avec plus d'option :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Shake : MonoBehaviour {

	private Vector3 initialPosition; // Initial position of the object.
	private Vector3 lastPosition; // Only for smooth.
	private Vector3 newPosition; // Only for smooth.
	private float time = 0; // Only for smooth.
	
	public float diameter = 0.35f; // The diameter of the sphere who generate a random Vector3.
	public bool smooth = true; // Smooth the shake of the object.
	public float timeForRandom = 1; // Only for smooth. It's the time between each generation of random Vector3.
	
	void Awake () {
		initialPosition = transform.position; // Set the initial position of the object.
	}
	
	void Update () {
		DebugFunction();
		if (smooth) {
			if (Time.time - time > timeForRandom) {
				lastPosition = newPosition;
				time += timeForRandom;
				newPosition = Random.insideUnitSphere * diameter + initialPosition;
			}
			transform.position = Vector3.Lerp(lastPosition, newPosition, (Time.time - time) / timeForRandom);
		}
		if (!smooth) {
			transform.position = Random.insideUnitSphere * diameter + initialPosition;
		}
	}
	
	void DebugFunction () {
		if (diameter <= 0f) {
			diameter = 0.1f;
		}
		if (timeForRandom <= 0f) {
			timeForRandom = 0.1f;
		}
	}
}

Elriks
Messages : 106
Inscription : 02 Oct 2011 08:28

Re: Empecher un objet de sortir du champ de vision de la cam

Message par Elriks » 28 Jan 2012 16:56

J'ai surtout constaté que le script de formation facile était carrement celui d'un membre de ce forum qui a été volé vu qu'ils laissent entendre en substance que le script est d'eux.. :roll:

viewtopic.php?f=2&t=1384

Merci Cayou et un grand merci artemisart je vais tester ça de suite

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Empecher un objet de sortir du champ de vision de la cam

Message par cayou66 » 28 Jan 2012 19:29

Elriks a écrit :J'ai surtout constaté que le script de formation facile était carrement celui d'un membre de ce forum qui a été volé vu qu'ils laissent entendre en substance que le script est d'eux.. :roll:

viewtopic.php?f=2&t=1384

Merci Cayou et un grand merci artemisart je vais tester ça de suite
Intéressant ce que tu viens de dire, y'en a qui s'embêtent pas !

Elriks
Messages : 106
Inscription : 02 Oct 2011 08:28

Re: Empecher un objet de sortir du champ de vision de la cam

Message par Elriks » 28 Jan 2012 20:17

Effectivement.

Sinon pour le script Artemisart, le résultat est différent de celui du script d'origine, les objets ne tremblent pas mais suivent des chemins aléatoires en permanence quand le smooth est activé et se "teleportent" 15x par seconde quand on le desactive, un peu trop rapide :lol:

Je garde la fonction lié au smooth en plus des tremblements de l'autre script, ca regle pas mon soucis d'origine mais ça enrichi mes possibilités, merci :mrgreen:

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Empecher un objet de sortir du champ de vision de la cam

Message par cayou66 » 28 Jan 2012 23:49

Y'a aussi une fonction Shake et Move avec iTween au cas où :)

Elriks
Messages : 106
Inscription : 02 Oct 2011 08:28

Re: Empecher un objet de sortir du champ de vision de la cam

Message par Elriks » 29 Jan 2012 18:23

Effectivement, je découvre le logiciel, bien sympa, merci !

Question subsidiaire, est ce qu'il est possible de "configurer" plusieurs états d'un même prefab ?

Exemple:

Scene1 : prefab ennemi donne la capacité de se tp

Scene 2 : prefab ennemi donne la capacité de se tp et de se deplacer

Je présume qu'on peut activer désactiver les fonctions directement dans le code mais il y a peut être une solution sans avoir a toucher au code ?

Merci

Répondre

Revenir vers « Scripting »