• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

169
Vistas
Acceder a otro método de secuencia de comandos desde el objeto instanciado

Estoy tratando de configurar mi juego donde hay un jugador, tocas la pantalla para lanzar el objeto, una vez que el objeto choca con otro objeto, se agrega 1 punto a la puntuación. Agregué un script al objeto instanciado que imprime un mensaje, a la consola, cuando se detecta una colisión. El guión también tiene una referencia a otro guión que contiene la variable de puntuación.

El guion es:

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class CrackEgg : MonoBehaviour { public Stats stats; void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "BreakEgg") { stats.DepositMoney(); Debug.Log("I am actually working"); } } }

El script de estadísticas es:

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Stats : MonoBehaviour { [Header("Bank")] public int bankAmount; public int depositAmount; public void DepositMoney() { bankAmount += depositAmount; } }

Sé que debo tener el script de estadísticas adjunto a un objeto de juego (lo tengo adjunto a un objeto de juego vacío). El objeto arrojado es prefabricado y tiene el script CrackEgg como componente. Intento arrastrar el objeto del juego Estadísticas al campo Estadísticas del script CrackEgg , pero no funciona. Solo funciona si el objeto del juego Stats también es prefabricado. El principal problema que tengo es que incluso cuando tengo el objeto prefabricado del juego Stats en la jerarquía, cuando pruebo el código, la variable bankAmount no aumenta en absoluto. Como resumen, quiero que el objeto instanciado detecte una colisión y luego ejecute el método DepositMoney() , desde el script Stats, pero no puedo encontrar una manera de hacerlo funcionar.

almost 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Comprobación rápida: crea un CrackEgg en la escena. Intente arrastrar el objeto Stats al campo. Deberia de funcionar. Ahora arrastre este CrackEgg a la Vista del proyecto para crear un prefabricado. El campo Stats está vacío en el prefabricado. ¿Por qué?

Se puede crear una instancia de una casa prefabricada en cualquier parte de su juego, por lo que es posible que esta referencia a un objeto de escena no sea válida en caso de que la casa prefabricada se instancia en otra escena. Por lo tanto, debe obtener la referencia al objeto Stats en tiempo de ejecución.

Puedes lograrlo de dos maneras:

MÉTODO 1

Etiquete su objeto Stats con una etiqueta "Stats".

Agregar etiqueta al objeto del juego en Unity

Luego localízalo en la escena cada vez que inicies un CrackEgg .

 class CrackEgg : MonoBehaviour { void Start() { stats = GameObject.FindGameObjectWithTag("Stats").GetComponent<Stats>(); } }

MÉTODO 2

Haga que su clase Stats sea estática y no un componente MonoBehaviour.

 public class Stats { private static int bankAmount; public static void DepositMoney(int depositAmount) { bankAmount += depositAmount; } }

Entonces no lo agrega a ningún objeto, ya que siempre hay una sola instancia de cada parámetro en el programa. Este es un patrón habitual para las clases de partitura. Para acceder a él, no necesita almacenar una referencia a Stats , solo use el nombre de la clase:

 if (collision.gameObject.tag == "BreakEgg") { Stats.DepositMoney(depositAmount); Debug.Log("I am actually working"); }

Dado que no puede asignar valores a las clases estáticas en el Editor, sugerí una modificación en la que la persona que llama define el monto del depósito al llamar. Es posible que deba pensar en los problemas de seguridad (no permitir valores fuera de un rango, etc.).

Además, generalmente se recomienda usar CompareTag en lugar de == : https://answers.unity.com/questions/200820/is-comparetag-better-than-gameobjecttag-performanc.html

almost 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda