Ariath
07/11/2013, 14h45
Bonjour tout le monde !
J'essaye de créer un script de facon a déplacer mon perso avec ma souris, et qu'il puisse éviter les obstacles.
Donc, j'ai un Perso + une Cible, le but est que mon perso aille à sa cible automatiquement.
#pragma strict
import Pathfinding;
//variables privées
private var scanneur : Seeker; //recupere les infos du scanner, les routes notamment
private var route : Path;
private var pointcourant : int;
private var controller : CharacterController;
//variables publiques
var cible : Transform;
function Start () {
//on recupere le seeker
scanneur = GetComponent(Seeker);
//on recupere le charcter controller
controller = GetComponent(CharacterController);
scanneur.StartPath(transform.position,cible.positi on, Onpathcomplete);
}
function Update () {
//si la route a été créé et que le perso n'est pas a la fin de la route
if(route != null && pointcourant < route.vectorPath.Count){
transform.position = route.vectorPath[pointcourant];
pointcourant ++;
}
}
function Onpathcomplete(p : Path){
//si pas d'erreur dans la création du chemin
if(!p.error){
route = p;
pointcourant = 0;
}else{
//si erreurs
Debug.Log(p.error);
}
}[/URL]Avec ce code, ca fonctionne, mon perso va à sa cible.Le soucis c'est que je veux qu'il tourne, de façon à éviter des obstacles.
J'ajoute donc a mon perso (capsule) la possibilité de tourner (rotation) de façon a suivre son trajet :
function Update () {
//si la route a été créé et que le perso n'est pas a la fin de la route
if(route != null && pointcourant < route.vectorPath.Count){
rotation = route.vectorPath[pointcourant] - transform.position;
rotation.y = 0;//pour que le perso se déplace bien sur son axe
//on fait tourner le perso
transform.rotation = Quaternion.LookRotation(rotation);
//pour que la vitesse soit la même quelque soit la puissance du PC
controller.SimpleMove(transform.TransformDirection (Vector3.forward) * vitesse * Time.deltaTime);
if(Vector3.Distance(transform.position,route.vecto rPath[pointcourant]) < 0.5){
transform.position = route.vectorPath[pointcourant];
pointcourant ++;
}
}
} (http://www.unity3d-france.com/unity/phpBB3/viewtopic.php?f=7&t=7123#) Et la Je bute sur du code, mon soucis est que mon perso s’arrête au bout de quelque mètres...
Je n'ai pas d'erreur et pourtant je bloque, mon perso(capsule) avance de quelques Unités et s’arrête en tremblotant http://www.unity3d-france.com/unity/phpBB3/images/smilies/icon_lol.gif la capsule qui titube, j'avais jamais vu ca...
Auriez vous une piste ?
Je précise que je suis une bonne grosse nouille en prog, j'apprends avec des tutaux Anglais/Francais sur le net, la plupart du temps je suis en panique...Alors, ayez pitié ne me fusillez pas !
EDIT : je précise que j'utilise A* Pathfinding Project et que je me sers de ce tuto [URL]http://www.youtube.com/watch?v=F_mF17ewzD4 (http://www.unity3d-france.com/unity/phpBB3/viewtopic.php?f=7&t=7123#).
J'essaye de créer un script de facon a déplacer mon perso avec ma souris, et qu'il puisse éviter les obstacles.
Donc, j'ai un Perso + une Cible, le but est que mon perso aille à sa cible automatiquement.
#pragma strict
import Pathfinding;
//variables privées
private var scanneur : Seeker; //recupere les infos du scanner, les routes notamment
private var route : Path;
private var pointcourant : int;
private var controller : CharacterController;
//variables publiques
var cible : Transform;
function Start () {
//on recupere le seeker
scanneur = GetComponent(Seeker);
//on recupere le charcter controller
controller = GetComponent(CharacterController);
scanneur.StartPath(transform.position,cible.positi on, Onpathcomplete);
}
function Update () {
//si la route a été créé et que le perso n'est pas a la fin de la route
if(route != null && pointcourant < route.vectorPath.Count){
transform.position = route.vectorPath[pointcourant];
pointcourant ++;
}
}
function Onpathcomplete(p : Path){
//si pas d'erreur dans la création du chemin
if(!p.error){
route = p;
pointcourant = 0;
}else{
//si erreurs
Debug.Log(p.error);
}
}[/URL]Avec ce code, ca fonctionne, mon perso va à sa cible.Le soucis c'est que je veux qu'il tourne, de façon à éviter des obstacles.
J'ajoute donc a mon perso (capsule) la possibilité de tourner (rotation) de façon a suivre son trajet :
function Update () {
//si la route a été créé et que le perso n'est pas a la fin de la route
if(route != null && pointcourant < route.vectorPath.Count){
rotation = route.vectorPath[pointcourant] - transform.position;
rotation.y = 0;//pour que le perso se déplace bien sur son axe
//on fait tourner le perso
transform.rotation = Quaternion.LookRotation(rotation);
//pour que la vitesse soit la même quelque soit la puissance du PC
controller.SimpleMove(transform.TransformDirection (Vector3.forward) * vitesse * Time.deltaTime);
if(Vector3.Distance(transform.position,route.vecto rPath[pointcourant]) < 0.5){
transform.position = route.vectorPath[pointcourant];
pointcourant ++;
}
}
} (http://www.unity3d-france.com/unity/phpBB3/viewtopic.php?f=7&t=7123#) Et la Je bute sur du code, mon soucis est que mon perso s’arrête au bout de quelque mètres...
Je n'ai pas d'erreur et pourtant je bloque, mon perso(capsule) avance de quelques Unités et s’arrête en tremblotant http://www.unity3d-france.com/unity/phpBB3/images/smilies/icon_lol.gif la capsule qui titube, j'avais jamais vu ca...
Auriez vous une piste ?
Je précise que je suis une bonne grosse nouille en prog, j'apprends avec des tutaux Anglais/Francais sur le net, la plupart du temps je suis en panique...Alors, ayez pitié ne me fusillez pas !
EDIT : je précise que j'utilise A* Pathfinding Project et que je me sers de ce tuto [URL]http://www.youtube.com/watch?v=F_mF17ewzD4 (http://www.unity3d-france.com/unity/phpBB3/viewtopic.php?f=7&t=7123#).