Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Esta bien o me hice la picha un lio con el Getcomponent?

Iniciado por Toloko, Diciembre 03, 2017, 12:59:15 AM

Tema anterior - Siguiente tema
Diciembre 03, 2017, 12:59:15 AM Ultima modificación: Diciembre 03, 2017, 11:43:08 AM por pioj
Hola antes de nada soy muy noob y creo q en el titulo lo deje claro pero se q necesitais mas info para poder darme vuestra opinion gracias de antemano.
 
Empezamos:  tengo un script en el arma la cual tiene el tag Arma se llama DisparoRecargaSonido y dentro de el se encuentra la variable
 



   
       
   
   
      Int cargadorBalas;
   
   
      I quiero acceder a ella desde el script AnimacionDisparo. ¿Seria algo asi?
   
   
      public class AnimacionDisparo :Monobehaviour
   
   
      Private DisparoRecargaSonido DisparoRS;
   
   
      Void Start ()
   
   
      DisparoRS = Arma.Getcomponent<DisparoRecargaSonido>();
   
   
   
   
       
   

[/quote]
 
¿Y luego ya podria acceder mediante DisparoRs ?
 
No se rian estoy empezando y hay cosas q no me quedan nada claras aunque me vea miles de tutos por eso pido ayuda solo quiero saber si es asi o no
 
Y perdon si no os pongo los scrips originales si no de cabeza es que no los tengo a mano en este momento
 
 

No entiendo mucho la pregunta, pero imagino que arma es un GameObject y lo tienes marcado como public para arrastrar la referencia desde el inspector? si es el caso esta bien claro traes la referencia desde el start y luego puedes acceder a sus metodos y variables publicas desde el Update o cuaquier otra funcion

Exacto el arma es un GameObject y mil gracias por tu respuesta. Ya q estoy al trabajo y no puedo probarlo y me interesaba saber si lo q pase era correcto y me alegraste la noche jajajaja que me he pasado todo el dia con eso en mi cabeza y porfin encontre solucion

Diciembre 03, 2017, 01:52:57 AM #3 Ultima modificación: Diciembre 03, 2017, 01:53:43 AM por lightbug
Hola, Si "arma" tiene el componente " DisparoRecargaSonido " podés hacer, en vez de un "public GameObject" un "public DisparoRecargaSonido" y arrastrar el gameObject de la escena, te ahorrás de hacer el GetComponent en Start, Unity automáticamente detecta el componente en el gameObject que arrastraste y hace la referencia, una pavada pero ayuda.
 
Cita de: Toloko date=1512259155y dentro de el se encuentra la variable
   
   
      Int cargadorBalas;
   


Ojo, si tenés solo "int" significa que esa variable es accesible solo por la instancia de la clase y por nadie más, osea que podés desde cualquier script usar el GetComponent pero nunca vas a poder acceder a ella (por lo menos directamente no) por eso se le llama privada, es analogo a definirla como "private int". Si la hacés "public int" ahora sí, si hacés el getcomponent vas a poder encontrar la variable, aunque tenés otras formas de acceder a ella.
 
 

Diciembre 03, 2017, 02:24:10 AM #4 Ultima modificación: Diciembre 03, 2017, 02:35:41 AM por Toloko
Gracias ligtbug  por lo del la aclaracion del int pero ahora q me lo dices creo que en el script original lo tengo public int aunque eso tampoco lo sabia cuando acabe del trabajo y este en  casa hare las pruebas y os cuento y os pasare los scripts para que os echeis unas risas o a llorar de lo chapuzas q seran jajajajaj aunque se que hay varias maneras de hacerlo si lo consigo con 1 sera un gran logro para mi ya q aun estoy con el aprendizage de c#  y en parte es gracias a la comunidad y los tutos de internet que eso de ser autodidacta y trabajar me lo pone dificil jajajajba mil gracias chicos/as

Diciembre 03, 2017, 09:32:57 AM #5 Ultima modificación: Diciembre 04, 2017, 08:11:42 PM por Toloko
Bueno como no fui capaz de conseguirlo de esa manera y despues de dar mil vueltas me doy cuenta que puedo hacerlo mas facil aun ya que los dos scripts van en el mismo GameObject asi que lo hice a lo facil y chapucero pero os dejo el script para que os echeis unas risas aunque no es 100% mio jejeje 
 
 
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class DisparoRecargaSonido : MonoBehaviour 
{
    public Text balasCargadorText;
    public Text balasTotalesText;
    public GameObject shootingParticle;
    public int balasTotalesMax;
    public int damage;
    public int balasCargadorMax;
    public int range;
    private  int balasTotales;
    private  int balasCargador;
    private int balasArecargar;
    private int balasArecargarReset = ;
    private float timer;
    private Animator animator;
    private Ray shootRay;
    private RaycastHit hit;
    private AudioSource audio;
    void Start()
    {
        animator = GetComponent<Animator>();
        audio = GetComponent<AudioSource> ();
        balasTotales = balasTotalesMax;
        balasCargador = balasCargadorMax -= balasArecargar;
    }
    void Update()
    {
        timer += Time.deltaTime;
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        bool corriendo = Input.GetKey(KeyCode.LeftShift);
        bool disparando = Input.GetButton("Fire1") && balasCargador >= 1;
        if (Input.GetButton("Fire1") && timer >= 0.1f && balasCargador >= 1)
        {
            audio.Play ();
            timer = ;
            Shoot ();
            balasCargador = balasCargador -= 1;
            balasArecargar = balasArecargar +=1;
        }
        balasCargadorText.text = balasCargador.ToString();
        balasTotalesText.text = balasTotales.ToString();
        if (Input.GetKeyDown(KeyCode.R) && balasCargador <= balasCargadorMax && balasTotales >= balasCargadorMax)
        {
            balasCargador = balasCargadorMax;
            balasTotales = balasTotales -= balasArecargar;
            balasArecargar = balasArecargarReset;
        }
 
        if ((h == && v == ) && !disparando)
        {
            animator.SetBool("Correr", false);
            animator.SetBool("Reposo", true);
            animator.SetBool("Disparo", false);
            animator.SetBool("Andando", false);
            shootingParticle.gameObject.SetActive(false);
        }
        if ((h != || v != ) && !corriendo && !disparando)
        {
            animator.SetBool("Correr", false);
            animator.SetBool("Reposo", false);
            animator.SetBool("Disparo", false);
            animator.SetBool("Andando", true);
            shootingParticle.gameObject.SetActive(false);
        }
        if ((h != || v != ) && corriendo && !disparando)
        {
            animator.SetBool("Correr", true);
            animator.SetBool("Reposo", false);
            animator.SetBool("Disparo", false);
            animator.SetBool("Andando", false);
            shootingParticle.gameObject.SetActive(false);
        }
        if (disparando)
        {
            animator.SetBool("Correr", false);
            animator.SetBool("Reposo", false);
            animator.SetBool("Disparo", true);
            animator.SetBool("Andando", false);
            shootingParticle.gameObject.SetActive(true);
 
        }
    }
    void Shoot()
    {
        shootRay.origin = Camera.main.transform.position;
        shootRay.direction = Camera.main.transform.forward;
        if(Physics.Raycast (shootRay.origin, shootRay.direction ,out hit, range, LayerMask.GetMask("Disparable")))
        {
            Enemigos enemyMovement = hit.collider.GetComponent<Enemigos> ();
            enemyMovement.health -= damage;
        }
    }
}

 


Pd : os recuerdo que estoy aprendiendo y el código de arriba contiene algunos fallos solo aviso para que si lo queréis usar que se sepa que no es correcto aunque funciona a su manera.

Etiquetas: