Tirer de gauche à droite Unity 2D
Tirer de gauche à droite Unity 2D
Bonjour/Bonsoir à tous,
J'ai un problème que je n'arrive pas à résoudre même grâce aux tutos sur YouTube, enfaîte je suis en train de développer un jeux platformer en 2d dans le style d'un mario bros classique, le principe avec mon personnage principale est qu'il puisse tirer à droite et à gauche, malheureusement même si je copie à l'exacte le code des tutos mon personnage ne tire que vers la droite, je sais que le problème vien du fait que je bloque la direction vers la droite avec une ligne de code mais je ne sais pas comment le remplacer pour qu'il puisse tirer à gauche comme à droite, de plus je suis nouveau sur ce forum alors je ne sais pas si je peux juste directement vous montrer mes scripts avec un copie/colle mais je suis aussi débutant dans la programmation du C#, même si ça ne m'empêche pas de me débrouiller et de comprendre ce que fait tel ou tel chose.
J'attend avec impatience vos aides parce que j'en ai vraiment marre de me casser la tête et de créer 10 000 script différent pour essayer de tirer à gauche.
PS : je suis très actif et si mon problème est résolu je n'hésiterez pas à le partager ça pourrez sauvez quelques dev débutant comme moi
J'ai un problème que je n'arrive pas à résoudre même grâce aux tutos sur YouTube, enfaîte je suis en train de développer un jeux platformer en 2d dans le style d'un mario bros classique, le principe avec mon personnage principale est qu'il puisse tirer à droite et à gauche, malheureusement même si je copie à l'exacte le code des tutos mon personnage ne tire que vers la droite, je sais que le problème vien du fait que je bloque la direction vers la droite avec une ligne de code mais je ne sais pas comment le remplacer pour qu'il puisse tirer à gauche comme à droite, de plus je suis nouveau sur ce forum alors je ne sais pas si je peux juste directement vous montrer mes scripts avec un copie/colle mais je suis aussi débutant dans la programmation du C#, même si ça ne m'empêche pas de me débrouiller et de comprendre ce que fait tel ou tel chose.
J'attend avec impatience vos aides parce que j'en ai vraiment marre de me casser la tête et de créer 10 000 script différent pour essayer de tirer à gauche.
PS : je suis très actif et si mon problème est résolu je n'hésiterez pas à le partager ça pourrez sauvez quelques dev débutant comme moi
Dernière édition par FuZeuR le 03 Avr 2021 16:50, édité 1 fois.
Re: Tirer de gauche à droite Unity 2D
Bonjour
oui poste ton script (entre les bonnes balises) c'est le moyen le plus sûr de comprendre ce qui ne va pas et de t'aider éventuellement
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Tirer de gauche à droite Unity 2D
Ok alors du coup voilà les scripts qui permettent à mon personnage de tirer :
Script qui permet à la balles de se déplacer :
Script qui permet à la balle de faire des dégâts et détruire l'ennemi :
Script qui permet de tirer le prefab de la balle :
Script qui permet à la balles de se déplacer :
Code : Tout sélectionner
using UnityEngine;
public class MoveBulletScript : MonoBehaviour
{
public Vector2 speed = new Vector2(10, 10);
public Vector2 direction = new Vector2(-1, 0);
private Vector2 movement;
void Update()
{
movement = new Vector2(
speed.x * direction.x,
speed.y * direction.y);
}
void FixedUpdate()
{
GetComponent<Rigidbody2D>().velocity = movement;
}
}
Script qui permet à la balle de faire des dégâts et détruire l'ennemi :
Code : Tout sélectionner
using UnityEngine;
public class ShotScript : MonoBehaviour
{
public int damage = 100;
public bool isEnemyShot = false;
void Start()
{
Destroy(gameObject, 20);
}
}
Script qui permet de tirer le prefab de la balle :
Code : Tout sélectionner
using UnityEngine;
public class WeaponScript : MonoBehaviour
{
public Transform PlayerShotPrefab;
public float shootingRate = 0.25f;
private float shootCooldown;
void Start()
{
shootCooldown = 0f;
}
void Update()
{
if (shootCooldown > 0)
{
shootCooldown -= Time.deltaTime;
}
}
public void Attack(bool isEnemy)
{
if (CanAttack)
{
shootCooldown = shootingRate;
var shotTransform = Instantiate(PlayerShotPrefab) as Transform;
shotTransform.position = transform.position;
ShotScript PlayerShot = shotTransform.gameObject.GetComponent<ShotScript>();
if (PlayerShot != null)
{
PlayerShot.isEnemyShot = isEnemy;
}
MoveBulletScript Move = shotTransform.gameObject.GetComponent<MoveBulletScript>();
if (Move != null)
{
Move.direction = this.transform.right;
}
}
}
public bool CanAttack
{
get
{
return shootCooldown <= 0f;
}
}
}
Dernière édition par FuZeuR le 03 Avr 2021 17:21, édité 1 fois.
Re: Tirer de gauche à droite Unity 2D
Re,
ben en parcourant rapidement ton code, au moment où tu instancies ton projectile, tu fais soit
ou
ben en parcourant rapidement ton code, au moment où tu instancies ton projectile, tu fais soit
Move.direction = this.transform.right;
ou
Move.direction = this.transform.left;
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Tirer de gauche à droite Unity 2D
le problème justement en fessant sa, ça me dit :
"Erreur CS1061 'Transform' ne contient pas de définition pour 'left' et aucune méthode d'extension accessible 'left' acceptant un premier argument de type 'Transform' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?) Assembly-CSharp"
Dans mon WeaponScript.
Re: Tirer de gauche à droite Unity 2D
oui excuse moi, j'ai répondu un peu vite, et effectivement
Donc il faut juste le remplacer par
Move.direction = this.transform.left;
n'est pas possible.Donc il faut juste le remplacer par
Move.direction = -this.transform.right;
.Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Tirer de gauche à droite Unity 2D
ça marche sauf que justement je souhaite que le personnage attaque à gauche et à droite selon la direction qu'il prend or avec
Move.direction = -this.transform.right;
ça tire que à gauche même si je rajoute Move.direction = this.transform.right;
avec.Re: Tirer de gauche à droite Unity 2D
Comment est géré ton personnage et son changement de direction ?
Souvent, le transform ne change pas, seul l'orientation du sprite change, avec par exemple une routine de Flip (qui se contente de changer le scaleX de 1 à -1 par exemple).
Souvent, le transform ne change pas, seul l'orientation du sprite change, avec par exemple une routine de Flip (qui se contente de changer le scaleX de 1 à -1 par exemple).
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Tirer de gauche à droite Unity 2D
Code : Tout sélectionner
using UnityEngine;public class Move : MonoBehaviour
{
public float moveSpeed;
public float jumpForce;
private bool isJumping;
private bool isGrounded;
public Transform groundCheck;
public float groundCheckRadius;
public LayerMask collisionLayers;
public Rigidbody2D rb;
private Vector3 velocity = Vector3.zero;
private float horizontalMovement;
public Animator animator;
public SpriteRenderer spriteRenderer;
public CapsuleCollider2D playerCollider;
public static Move instance;
public void Update()
{
isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, collisionLayers);
animator.SetBool("collisionLayers", isGrounded);
horizontalMovement = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
if (isGrounded && Input.GetButtonDown("Jump"))
{
animator.SetBool("Jump", true);
isJumping = true;
}
MovePlayer(horizontalMovement);
void MovePlayer(float _horizontalMovement)
{
Vector3 targetVelocity = new Vector2(_horizontalMovement, rb.velocity.y);
rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref velocity, .05f);
if (isJumping == true)
{
rb.AddForce(new Vector2(0f, jumpForce));
isJumping = false;
}
}
Flip(rb.velocity.x);
float characterVelocity = Mathf.Abs(rb.velocity.x);
animator.SetFloat("Speed", rb.velocity.x);
void Flip(float _velocity)
{
if (_velocity > 0.1f)
{
spriteRenderer.flipX = false;
}
else if (_velocity < -0.1f)
{
spriteRenderer.flipX = true;
}
}
bool PlayerShot = Input.GetButtonDown("Fire1");
PlayerShot |= Input.GetButtonDown("Fire2");
if (PlayerShot)
{
WeaponScript weapon = GetComponent<WeaponScript>();
if (weapon != null)
{
weapon.Attack(false);
}
}
}
private void Awake()
{
if (instance != null)
{
Debug.LogWarning("Il y a plus d'une instance de Move dans la scène");
return;
}
instance = this;
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(groundCheck.position, groundCheckRadius);
}
}
Re: Tirer de gauche à droite Unity 2D
la donnée spriteRenderer.flipX te donne l'orientation (gauche/droite) de ton Player, ce qui te permet d'en déduire la direction à initialiser pour le projectile.
Par contre, essais d'organiser ton code, de l'aérer, et évite les définitions de méthodes au sein d'autre méthode. Niveau lisibilité (même pour toi pour la suite et quand il faut déboguer) c'est pas terrible
Par contre, essais d'organiser ton code, de l'aérer, et évite les définitions de méthodes au sein d'autre méthode. Niveau lisibilité (même pour toi pour la suite et quand il faut déboguer) c'est pas terrible
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ