Aide scripting pour plateforme parent
Aide scripting pour plateforme parent
Hello,
Dans mon projet il y a un FirstPersonController qui peut sauter sur des plateformes qui effectuent une rotation sur l'axe x grâce à un petit script.
Les plateformes utilisent un mesh colider et la caméra est sur le FirstPersonController (rigid body + gravity). Le problème est que lorsque les plateformes tournent, le FirstPersonController ne suit pas le mouvement et tombe...
Comment faire pour lui faire suivre le mouvement de l'objet ? Je pense que ça à voir avec le concept d'objet enfant (le controller) et parent (la plateforme) ? Sachant aussi que le controller devra continuer à pouvoir avancer sur la platforme mais n'être plus solidaire de l'ensemble en cas de saut.
Quelles intructions utiliser en C# ? Merci d'avance de votre aide.
Si qq à un exemple de script type pour ce genre de situation je suis preneur...
Dans mon projet il y a un FirstPersonController qui peut sauter sur des plateformes qui effectuent une rotation sur l'axe x grâce à un petit script.
Les plateformes utilisent un mesh colider et la caméra est sur le FirstPersonController (rigid body + gravity). Le problème est que lorsque les plateformes tournent, le FirstPersonController ne suit pas le mouvement et tombe...
Comment faire pour lui faire suivre le mouvement de l'objet ? Je pense que ça à voir avec le concept d'objet enfant (le controller) et parent (la plateforme) ? Sachant aussi que le controller devra continuer à pouvoir avancer sur la platforme mais n'être plus solidaire de l'ensemble en cas de saut.
Quelles intructions utiliser en C# ? Merci d'avance de votre aide.
Si qq à un exemple de script type pour ce genre de situation je suis preneur...
Re: Aide scripting pour plateforme parent
Je pense qu'il faut que tu mettes le collider de ta plateforme en "Trigger", puis que tu utilises la fonction OnTriggerEnter pour définir par script que ton personnage devient enfant de ta plateforme et OntriggerExit pour supprimer le lien de parenté...
La fonction a utiliser est celle-ci : https://docs.unity3d.com/ScriptReferenc ... arent.html
La fonction a utiliser est celle-ci : https://docs.unity3d.com/ScriptReferenc ... arent.html
Re: Aide scripting pour plateforme parent
Merci pour le conseil. J'ai enfin pu me remettre à mon projet.
J'ai cherché sur le net et je pense que l'article qui se rapproche le plus de ce que je veux faire est celui ci :
https://www.reddit.com/r/Unity3D/commen ... _rotating/
Voici le bout de code qu'il faudrait que je mette sur ma plateforme qui tourne (d'après ce que j'ai compris) :
Mais ce bout de code semble hors de son contexte, il doit manquer des trucs car lorsque je l'implante dans un scripte vide dans la partie Update, ca ne fonctionne pas...(le compilateur ne veux pas de "void" ici) Le "Player" c'est le fpscontroller je pense ?
J'ai cherché sur le net et je pense que l'article qui se rapproche le plus de ce que je veux faire est celui ci :
https://www.reddit.com/r/Unity3D/commen ... _rotating/
Voici le bout de code qu'il faudrait que je mette sur ma plateforme qui tourne (d'après ce que j'ai compris) :
Code : Tout sélectionner
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
other.gameObject.transform.parent.SetParent(transform, true);
}
}
void OnTriggerExit(Collider other)
{
if (other.tag == "Player")
{
other.gameObject.transform.parent.SetParent(null, true);
}
}
Re: Aide scripting pour plateforme parent
Coucou,
ben le bout de code à l'air bon mais il ne faut pas le mettre dans un update...
Les "OnTrigger" sont des 'events' un peu comme ici sauf qu'ils ne sont pas déclenchés par une routine mais par une condition...
ben le bout de code à l'air bon mais il ne faut pas le mettre dans un update...
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
other.gameObject.transform.parent.SetParent(transform, true);
}
}
void OnTriggerExit(Collider other)
{
if (other.tag == "Player")
{
other.gameObject.transform.parent.SetParent(null, true);
}
}
}
}
Mon jeu de développement cellulaire : MICROBIOME (encore quelques bugs...)
(merci bien à ceux qui passent mettre des étoiles ! ^^)
(merci bien à ceux qui passent mettre des étoiles ! ^^)
Re: Aide scripting pour plateforme parent
J'ai changé le scripte sur la plateforme en rotation, je n'ai plus d'erreur de compilation, mais ça ne fonctionne pas.
Lorsque je fais comme Aiyor m'a expliqué plus haut "Is Trigger" coché sur la platforme mon fpscontroller passe directe à travers.
Lorsque j'encoche le "Is Trigger" le fpscontroller est de nouveau sur la plateforme en rotation mais ne tourne pas avec...
Dans le bout de code :
"Player" c'est quoi ? Je suppose le nom de notre fpscontroller ? la où est attaché la main camera ?
Lorsque je fais comme Aiyor m'a expliqué plus haut "Is Trigger" coché sur la platforme mon fpscontroller passe directe à travers.
Lorsque j'encoche le "Is Trigger" le fpscontroller est de nouveau sur la plateforme en rotation mais ne tourne pas avec...
Dans le bout de code :
Code : Tout sélectionner
(other.tag == "Player")
Re: Aide scripting pour plateforme parent
Oui excuse moi c'est parce qu'il faut créer un Empty avec un collider en IsTrigger et l'arranger pour qu'il soit peu plus grand en hauteur de ta plateforme, tu met ensuit ta plateforme enfant de cet Empty (tu peux renommer ton Empty en "plateforme" et ta plateforme en "gfx" par exemple. Tu met ton script sur le niveau le plus haut dans l'arbo, donc sur ton Empty...
Dans mon screen, tu dois le mettre sur "PlateformeTournante" le script :
C'est un "tag", tu peux retrouver ça dans l'inspector en haut . Par défaut, ton personnage, doit avoir "Untagged", tu lui colle "Player" pour que ça marche, c'est un tag par défault, il existera déjà. Mais si jamais il n'y ai pas, tu peux le créer (en, bas de la barre de défilement des tag, tu as "Add Tag")Nemo67 a écrit : ↑20 Août 2017 11:00Dans le bout de code :"Player" c'est quoi ? Je suppose le nom de notre fpscontroller ? la où est attaché la main camera ?Code : Tout sélectionner
(other.tag == "Player")
Edit :
Il faut modifier légèrement le script par contre :
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
Transform gfx;
private void Start()
{
gfx = transform.Find("GFX").GetComponent<Transform>();
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
other.gameObject.transform.SetParent(gfx, true);
}
}
void OnTriggerExit(Collider other)
{
if (other.tag == "Player")
{
other.gameObject.transform.SetParent(null, true);
}
}
}
Re: Aide scripting pour plateforme parent
Merci Aiyor. J'ai enfin eu un peu de temps pour tester.
Malheureusement le résultat n'est pas ce que j’attendais .
Des que mon Player rencontre l'empty avec le Trigger il est propulsé dans le ciel !!!
J'ai essayé en enlevant le scripte de rotation de la plateforme ; en principe il devrait pouvoir marcher dessus normalement mais la aussi le Player est éjecté en l'air (l'axe des y est sans cesse incrémenté j'ai l’impression).
Une question déjà par rapport à la rotation de la plateforme. Le scripte est juste à mettre sur le parent je pense ?
Dans ton scripte il n'y a pas d'Update c'est normal ?
Edit : j'ai refais une petite scène a partir de 0 en faisant abstraction de mon projet principal.
Ca fonctionne mieux. Le player saute sur la plateforme qui devient bien son parent. Le seul souci c'est qu'en sautant sur une autre plateforme ou sur le sol la camera fait n'importe quoi. Dans le lien que j'ai indiqué en début de post en anglais la personne a eu le même problème. Apparemment il faut injecter qq chose dans le fpscontroller au niveau du scipte de mouvement de la souris.
Pour revenir a mon problème j'ai fais l'acquisition de l'asset suivant qui est en fonction dans mon projet principal :
https://www.assetstore.unity3d.com/en/#!/content/79436:
Je pense qu'il y a surement un conflit avec les scriptes utilisés...ça va être coton pour faire fonctionner les 2 principes
Malheureusement le résultat n'est pas ce que j’attendais .
Des que mon Player rencontre l'empty avec le Trigger il est propulsé dans le ciel !!!
J'ai essayé en enlevant le scripte de rotation de la plateforme ; en principe il devrait pouvoir marcher dessus normalement mais la aussi le Player est éjecté en l'air (l'axe des y est sans cesse incrémenté j'ai l’impression).
Une question déjà par rapport à la rotation de la plateforme. Le scripte est juste à mettre sur le parent je pense ?
Dans ton scripte il n'y a pas d'Update c'est normal ?
Edit : j'ai refais une petite scène a partir de 0 en faisant abstraction de mon projet principal.
Ca fonctionne mieux. Le player saute sur la plateforme qui devient bien son parent. Le seul souci c'est qu'en sautant sur une autre plateforme ou sur le sol la camera fait n'importe quoi. Dans le lien que j'ai indiqué en début de post en anglais la personne a eu le même problème. Apparemment il faut injecter qq chose dans le fpscontroller au niveau du scipte de mouvement de la souris.
Pour revenir a mon problème j'ai fais l'acquisition de l'asset suivant qui est en fonction dans mon projet principal :
https://www.assetstore.unity3d.com/en/#!/content/79436:
Je pense qu'il y a surement un conflit avec les scriptes utilisés...ça va être coton pour faire fonctionner les 2 principes
Re: Aide scripting pour plateforme parent
Pour les questions, oui le script de Aiyor est à mettre sur une plateforme avec enfant gfx comme sur le screenshot mais tu as du piger... et il faut minimiser les appels dans les Updates...
N'importe quoi... mais encore? Le player (fpscontroller) se 'déparente' bien?
euh... non le problème du post est le parentage d'une plateforme. Pour une compatibilté de l'asset, il faut ouvrir un autre post. Mais c'est spécifique et sans l'asset il ne sera pas toujours possible de répondre...
Mon jeu de développement cellulaire : MICROBIOME (encore quelques bugs...)
(merci bien à ceux qui passent mettre des étoiles ! ^^)
(merci bien à ceux qui passent mettre des étoiles ! ^^)