Tirer dans la direction du personnage

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Arthuruswolf
Messages : 2
Inscription : 10 Mars 2018 13:52

Tirer dans la direction du personnage

Message par Arthuruswolf » 10 Mars 2018 14:10

Je commence le code depuis peu et je cherche a faire un prototype en suivant plusieurs tuto pour réaliser un 2D platformer j'ai déjà les codes qui me permette de tirer mais il provienne d'un shooter, il vise forcement dans 1 seule direction et j'aimerais savoir comment définir en fonction de la direction ou vise le joueur l’enclenchement du tir dans cette direction merci de votre aide.

Script de l'arme:

Code : Tout sélectionner

using UnityEngine;
using System;
using UnityStandardAssets.CrossPlatformInput;

/// <summary>
/// Launch projectile
/// </summary>
public class WeaponScript : MonoBehaviour
{
	//--------------------------------
	// 1 - Designer variables
	//--------------------------------

	/// <summary>
	/// Projectile prefab for shooting
	/// </summary>
	public Transform shotPrefab;

	/// <summary>
	/// Cooldown in seconds between two shots
	/// </summary>
	public float shootingRate = 0.25f;


	//--------------------------------
	// 2 - Cooldown
	//--------------------------------

	private float shootCooldown;

	void Start()
	{
		shootCooldown = 0f;
	}

	void Update()
	{
		if (shootCooldown > 0)
		{
			shootCooldown -= Time.deltaTime;
		}
	}

	//--------------------------------
	// 3 - Shooting from another script
	//--------------------------------

	/// <summary>
	/// Create a new projectile if possible
	/// </summary>
	public void Attack(bool isEnemy)
	{
		if (CanAttack)
		{
			shootCooldown = shootingRate;

			// Create a new shot
			var shotTransform = Instantiate(shotPrefab) as Transform;

			// Assign position
			shotTransform.position = transform.position;

			// The is enemy property
			ShotScript shot = shotTransform.gameObject.GetComponent<ShotScript>();
			if (shot != null)
			{
				shot.isEnemyShot = isEnemy;
			}

			// Make the weapon shot always towards it
			MoveScript move = shotTransform.gameObject.GetComponent<MoveScript>();
			if (move != null)
			{
				
				move.direction = this.transform.right; // towards in 2D space is the right of the sprite
			}
		}
	}

	/// <summary>
	/// Is the weapon ready to create a new projectile?
	/// </summary>
	public bool CanAttack
	{
		get
		{
			return shootCooldown <= 0f;
		}
	}
}
scrip du perso

Code : Tout sélectionner

using System;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;

namespace UnityStandardAssets._2D
{
    [RequireComponent(typeof (PlatformerCharacter2D))]
    public class Platformer2DUserControl : MonoBehaviour
    {
        private PlatformerCharacter2D m_Character;
        private bool m_Jump;


        private void Awake()
        {
            m_Character = GetComponent<PlatformerCharacter2D>();
        }


        private void Update()
        {
            if (!m_Jump)
            {
                // Read the jump input in Update so button presses aren't missed.
                m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
            }
			// 5 - Shooting
			bool shoot = Input.GetButton("Fire1");
			shoot |= Input.GetButton("Fire2");
			// Careful: For Mac users, ctrl + arrow is a bad idea

			if (shoot)
			{
				WeaponScript weapon = GetComponent<WeaponScript>();
				if (weapon != null)
				{
					// false because the player is not an enemy
					weapon.Attack(false);
				}
			}
        }


        private void FixedUpdate()
        {
            // Read the inputs.
            bool crouch = Input.GetKey(KeyCode.LeftControl);
            float h = CrossPlatformInputManager.GetAxis("Horizontal");
            // Pass all parameters to the character control script.
            m_Character.Move(h, crouch, m_Jump);
            m_Jump = false;
        }

    }
}
.
 ! Message de : Max
Évitez de multiplier le nombre des messages. Attention à le section où vous poster.
Enfin, pour les codes, utilisez les balises prévues.
Merci de lire la Netiquette.

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

Re: Tirer dans la direction du personnage

Message par Max » 10 Mars 2018 15:01

Bonjour Arthuruswolf,

Une petit recherche rapide sur le forum m'a amené sur ce sujet récent.
Mais il en existe d'autres, abordant la même problématique.
Image
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

Arthuruswolf
Messages : 2
Inscription : 10 Mars 2018 13:52

Re: Tirer dans la direction du personnage

Message par Arthuruswolf » 11 Mars 2018 09:34

Désolé je ne cherche pas à tirer dans la direction de la souris mais du Sprite, j'ai déjà recherche ce sujet mais il n'est jamais résolu ou alors celui qui l'a demandé et résolu ne poste pas comment il a fait.

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

Re: Tirer dans la direction du personnage

Message par Max » 11 Mars 2018 18:06

Arthuruswolf a écrit :
11 Mars 2018 09:34
Désolé je ne cherche pas à tirer dans la direction de la souris mais du Sprite, j'ai déjà recherche ce sujet mais il n'est jamais résolu ou alors celui qui l'a demandé et résolu ne poste pas comment il a fait.
Cela manque de précision. La direction du sprite, ça veut dire si il est orienté vers la gauche ou la droite ?
(comme dans ce sujet par exemple?)
Image
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

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Tirer dans la direction du personnage

Message par Titan » 12 Mars 2018 00:26

Pour "tirer", Il te faut un vecteur et un point d'origine. C'est le vecteur qui te manque ? Il n'existe que 4 méthodes pour trouver un vecteur en dev gameplay:
- avec ton origine et un autre point, tu soustrait, tu normalize...
- Avec le transform.forward d'un gameobject (ou right, ou up).
(- Avec une normal, quand tu voudras faire des ricocher)
(- World coordinate: Vector3.right directement)

"la direction du sprite", j'ai l'impression qu'on est dans le 2éme cas. prend le gameobject sur lequel est attaché ton sprite si c'est pas celui du script (liaison dans l'inspector, ou transform.getchild) et tu fait spriteGameObject.transform.forward.

Si ça aide pas il va falloir poser la question plus clairement ;-)
____________________________________________
Hop Boy

Répondre

Revenir vers « (C#) CSharp »