J'ai fais un petit script, que tu attaches au projectile. Il faut que tu appelles la fonction Init quand tu le créé et que tu lui passe le GameObject du player en paramètre.
using UnityEngine;
public class Balle : MonoBehaviour
{
private GameObject player;
private Rigidbody rg;
public float force = 0.5f;
Quaternion rotation;
Vector3 radius = new Vector3(5,0,0);
float currentRotation = 0.0f;
public void Init(GameObject player)
{
this.player = player;
this.rg = GetComponent<Rigidbody>();
currentRotation = 180;
}
void FixedUpdate()
{
currentRotation += (force * Time.fixedDeltaTime * 100);
rotation.eulerAngles = new Vector3(0, currentRotation, 0);
transform.position = (rotation * radius) + radius;
}
}
Merci, sa ma l'air de fonctionner, sauf que quand j’appuie sur "e" le boomerangs spawn bien mais il reste sur place, puis disparait, ou bien si je ne définie pas moi mime le gameobject player il spawn, et fait des "aller retour" puis disparaît je précise que de base le script "tire" et accrocher a un gameObject "Eject" luis mème enfant du player et qu'il a une force de 1000 (si je met moins il est beaucoup trop long)
Il faut que le GameObject qui est le script Balle est un Rigidbody (et pas un rigibody2D!), il faut que celui que le script qui initialise le projectil, appele la fonction Init() de la balle.
Des allers retours rond ?
de toute façon je n'ai pas de truc "2d" dans mon projet, pour une raison obscure unity "pense" que mon jeu est en 3D ! je vais pas le contredire....:hap:
donc c'est bien :
GetComponent<Balle >().Init();
que je dois mettre dans mon script "tire" (qui permet d'instancier la balle )
et sinon vue qu'une vidéo vaut mille mots voici se que ça me fais
https://www.youtube.com/watch?v=AlW4HtI0xC0&feature=youtu.be
au début de la vidéo, la variable "force" de balle est a 1, ensuite je la passe a 1000
la variable "force" de tire, est elle toujours a 1000
et a chaque fois que tu vois ma perso lever son bras c'est que j'appuie sur "e"
oups ! c'est plutôt :
Boomerang.GetComponent<Balle>().Init();
Non ?
Le 21 juin 2017 à 17:25:19 Kira__3 a écrit :
oups ! c'est plutôt :Boomerang.GetComponent<Balle>().Init();
Non ?
Oui, et vu que j'ai indiqué qu'il fallait donner le player en paramètre, c'est même:
GameObject Bullet = Instantiate(Projectil, transform.position, Quaternion.identity) as GameObject;
Bullet.GetComponent<Balle>().Init(this.gameObject);
qui doit être après le if de ton player, quand il initialise le boomerang.
Je pensais que tu cherchais cet effet car c'était en vue de dessus. Mais en 2d comme ça, pourquoi ne pas simplement faire avancer le boomerang un petit peu, et le faire apparaitre derrière toi ensuite ?
Ça donnerait l'illusion que le boomerang a fait le tour de la zone ?
Tu n'as clairement pas besoin de faire réellement un tour sur l'axe x et z, il suffit de donner l'illusion pour ce genre de choses...
Le problème c'est que la zone est beaucoup plus gande que se que tu a vue la perso peu ce déplacer a gauche et a droite sa n’irais donc pas
Il faudrait voir avec la vue scène pour voir en 3D où va le boomerang quand tu le lances.
Le boomerang suit l'axe X, de toute façon j'ai bloquer l'axe y et z dans le rigidBody
Ah oui effectivement avec ton script activer il tourne au tour de ma perso
Tu l'aurais précisé j'aurai passé nettement moins de temps, c'était beaucoup plus simple en 2D comme ça.
Ah oui effectivement avec ton script activer il tourne au tour de ma perso
Donc, c'est bon ?
Vraiment désolée !
Et nop sa ne marche pas, il tourne au tour de l'axe "Y" moi je veux qu'il parte en en suivant l'axe "X" pendant une seconde (ça c'est bon) et après qu'il reparte en direction de la perso
Tu peux te servir de la fonction Mathf.PingPong(), qui permet de faire varier un float entre 0 et un maximum (et quand tu dépasse le maximum, ça revient jusqu'à 0 pas à pas.
using UnityEngine;
public class Balle : MonoBehaviour
{
private GameObject player;
public float force = 0.5f; // Vitesse de déplacement
public int maxDist = 2; // Éloignement max du lanceur
private float startPosX;
private float startTime;
public void Init(GameObject player)
{
this.player = player;
this.startPosX = transform.position.x;
this.startTime = Time.time;
}
void FixedUpdate()
{
float newXPos = Mathf.PingPong((Time.time - startTime + startPosX) + force * Time.fixedDeltaTime, maxDist + startPosX);
transform.position = new Vector3(newXPos, transform.position.y, transform.position.z);
}
}
Aussi quand à cause des rigidbody le boomerang était décalé dès qu'il s’initialise sur le personnage, alors il faut que tu le décale sur l'axe de la moitié de la taille du sprite du joueur. (J'ai décalé de 1 par défaut) :
if (Input.GetKeyDown(KeyCode.E) && !isBoomerangThrown)
{
GameObject Bullet = Instantiate(Projectil, new Vector3('''transform.position.x+1''', transform.position.y, transform.position.z), Quaternion.identity) as GameObject;
Bullet.GetComponent<Balle>().Init(this.gameObject);
isBoomerangThrown = true;
}
Merci, ont y est presque !
j'ai ajouter ça a la fonction Update de tire:
void Update()
{
if (Input.GetKeyDown(KeyCode.E) && !isBoomerangThrown)
{
GameObject Bullet = Instantiate(Projectil, new Vector3('''transform.position.x+1''', transform.position.y, transform.position.z), Quaternion.identity) as GameObject;
Bullet.GetComponent<Balle>().Init(this.gameObject);
Bullet.GetComponent<Rigidbody>().velocity = GameObject.Find("Player").GetComponent<PlayerController>().TireDirection * Force * Time.deltaTime;
isBoomerangThrown = true;
Invoke("DestroyBoomerang", 1f);
}
}
c'est se que tu ma donner mais j'ai 5 erreur a la ligne
GameObject Bullet = Instantiate(Projectil, new Vector3('''transform.position.x+1''', transform.position.y, transform.position.z), Quaternion.identity) as GameObject;
sa dit:
Dans le script Vector3(' ' ' transform.position.x+1' ' '
est souligner en rouge et sa dit "Vector3 ne contient pas de constructeur qui acceptent les argument 5 "
Hahaha new Vector3('''transform.position.x+1'''
J'avais rajouté des ''' pour que ça soit en gras car c'est l'élément que je t'expliquais au dessus. Mais quand on met le truc pour le gras dans les balises code, il affiche les tirets au lieu du gras :p
Bonjour,
La problématique de l'erreur vient du copier coller sans compréhension du code donné en exemple.
Il serait temps aux Beginers de visualiser et d'appliquer les différents Tutos du site Unity, autrement à ce rythme là, on va devoir écrire le programme pour les autres sans y être vraiment interessé,
C'était juste un petit coups de gueule....
En // n'oubliez pas de remercier TheRealMarco pour ses réponses et son dévouement à vous aider.
Merci mais je suis une adulte, pas besoin de m'apprendre les bases de la politesse, bien sur que je vais lui dire merci, je lui est déjà dit 3 fois en plus ! ensuite j'ai regarder les tutos,surtout de "tuto unity fr" et "unity pour les nuls" mais il n'y a pas encore de tuto
"How to create a 2D game where the heroine shoots pirate with a boomerange"
je ne fais pas du bête copier coller car j’essaie de comprendre le script (par exemple je ne connaissais pas FixedUpdate) et j'ai donc rechercher sur le net... Mais c'est vrais qu'un transform.position entre des ' ' ' ' ' ' sa aurais du me choquée, désolée de ne pas l'avoir vue.
Bisou
TheRealMarco
Merci (et de quatre ) pour l'aide, le script fonctionne !!!! j'ajouterais ton noms au crédit du jeu si cela ne te dérange pas
Bonjour, je viens d'avoir un bug commun qui semble réparable en chageant les settings moi voilà :
"J'ai un point light et un cube par exemple, je veux que le point light et le cube soient fixes."
Jusqu'ici OK. Cependant
"L'ombre émise par le point light, que ce soit en hard shadow ou soft shadow, se pixelise après une certaine distance. J'ai essayé de trifouiller dans les players settings, les quality et graphix setting, mais rien ne change! "
Voilà. Vous avez le problème, j'attend la solution.
Solution possible (pas encore testée au moment où j'écris) : changer le scale du point light pourrais-t-il augmenter la distance d'éclairage avant que l'ombre ne se pixelise :/?
Vous engueulez pas, c'est dommage.
De rien Kira, ça me dérange pas.
Bonjour les amis !
J'ai réalisé un runner 3D sur unity.
Là j'aimerais ajouter un niveau qui se joue en rhytme avec la musique. Un peu a la gémetrie dash, c'est à dire que quand on entend un "boom" dans la musique, c'est aussi qu'il y a un obstacle dans le jeu et que le joueur doit sauter.
Mais du coup comment créer les obstacles en fonction de la musique et synchroniser le tout svp ?
Pour le moment ce que je fais c'est que je lance une partie avec un petit script qui fait que quand j'appuie sur "p", ca place un marqueur et a la fin je recupere les coordonnées des marqueurs pour placer un obstacle et je m'arrange pour que ca coordonne avec la musique. Mais ca peut pauser probleme si on a une chute de quelque fps, rien n'est synchro après...
http://answers.unity3d.com/questions/802319/loop-getspectrumdata-through-a-song.html
Tu utilises GetSpectrumData. Dans le lien ci-dessus, l'auteur explique qu'il mets la musique une première fois en muet, 3 secondes en avance, comme ça, il peut faire apparaitre les objets 3 secondes en avance pour que le moment où l'utilisateur touche soit syncrhonisé avec la musique qu'il entend.