Empecher un objet de sortir du champ de vision de la camera
Empecher un objet de sortir du champ de vision de la camera
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
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
- 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
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);
}
}
Re: Empecher un objet de sortir du champ de vision de la cam
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.
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.
- 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
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;
}
}
}
Re: Empecher un objet de sortir du champ de vision de la cam
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..
viewtopic.php?f=2&t=1384
Merci Cayou et un grand merci artemisart je vais tester ça de suite
viewtopic.php?f=2&t=1384
Merci Cayou et un grand merci artemisart je vais tester ça de suite
Re: Empecher un objet de sortir du champ de vision de la cam
Intéressant ce que tu viens de dire, y'en a qui s'embêtent pas !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..
viewtopic.php?f=2&t=1384
Merci Cayou et un grand merci artemisart je vais tester ça de suite
Re: Empecher un objet de sortir du champ de vision de la cam
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
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
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
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
Re: Empecher un objet de sortir du champ de vision de la cam
Y'a aussi une fonction Shake et Move avec iTween au cas où
Re: Empecher un objet de sortir du champ de vision de la cam
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
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