Un usuario preguntó 👇

[ad_1]

estoy tratando de hacer uno script que permite el hitbox de la cabeza y el hitbox del cofre que son children al objeto principal del juego, para ser detectado por el script para que se produzcan daños. Por ejemplo, el principal script sabe cuándo se golpea el colisionador de cabeza, en comparación con el colisionador de cuerpo. (Actualmente no funciona en absoluto if activado). Probé muchos scripts y busqué respuestas y realmente no puedo encontrarlas. Por favor ayuda. Tenga en cuenta que, hasta donde yo sé, los comentarios tienen poco o nada que ver con el problema que tengo. (Editar): Aclarado qué parte de la script Estoy con problemas.

Aquí está la parte de script esto me esta dando problemas:

 
     public void OnTriggerEnter(Collider collider)
     
         myLastHit = collider.gameObject.GetComponent<PunchDetection>().punched;
 
         foreach(Transform sibling in transform.parent)
         
             if(sibling.name == "HeadHitbox")
             
                 collider.enabled = true;
 
                 //Collider col = child.GetComponent<SphereCollider>();
 
                 if (canTakeDamage && myLastHit is SphereCollider)
                 
                     TakeDamage(15);
 
                     StartCoroutine(damageTimer());
 
                 
             
 
             if (sibling.name == "RibsHitbox")
             
                 collider.enabled = true;
 
                 //Collider col = child.GetComponent<CapsuleCollider>();
 
                 if (canTakeDamage && myLastHit is CapsuleCollider)
                 
                     TakeDamage(5);
                     
                     StartCoroutine(damageTimer());
                                 
             
         
         
     
 
     public void TakeDamage(int damage)
     
         currentHealth -= damage;
 
         healthBar.SetHealth(currentHealth);
 
 
     
 
     private IEnumerator damageTimer()
     
         canTakeDamage = false;
         yield return new WaitForSeconds(damageTimeout);
         canTakeDamage = true;
     ```

Posible respuesta

Porque no [SerialisedField] protegido RigidBody headHitChildObject, ribHitChildObject;

Arrástralo y suéltalo en el inspector. Que en la función de inicio. headHitChhildObject = findObjectOftType().gameObject.GetComponent() ribHitChhildObject= findObjectOfType(). gameObject.GetComponent() (Haga esto por separado para cada objeto)

Cambie los parámetros de daño a Public Void TakeDamage (Collider triggerObject) — Yo personalmente usaría un flotador para daño/salud, pero así soy yo. En función de disparo. TakeDamage (colisión)

Inside Take Damage Fumction tiene las siguientes líneas para if (triggerObject.attachedRigidBody ! = null && brothers.name = = putname) currentHealth – = cantidad de daño To Else If(triggerObject. addedRigidBody ! = null && brothers.name = = putOtherName) currentHealth – = cantidad de daño

(Mi sugerencia más ideal) O mejor aún, hazte un Máster script para hacer frente a los golpes.(oyente) Prácticamente lleva daño y numerador. public Void On Enable() MyGameEvents.onTriggerColliderEvent +=
recibir daño;

vacío público al deshabilitar ()

MyGameEvents.onTriggerColliderEvent -= TakeDamage;

una delegación script para manejar eventos en scripts (no solo estos scripts sino otros scripts en lugar de constantes referencias cruzadas una y otra vez y código largo!

clase estática pública MyGameEvents o algo que elijas

delegado público void OnTriggerCollider(Collider triggerObject, int cantidad) ;

Público estático OnTriggerCollider onTriggerColliderEvent ;

En un script en cada gatillo children los componentes solo tienen;
[SerialisedField] protected int DamageToCall // Establecer en el inspector, para que pueda probar esto)

OnTriggerEnter(Colisionador Colisionador)
MyGameEvents.onTriggerColliderEvwnr?.Invoke(Collider, DamageToCall)

y puede usar MyGameEvents públicos estáticos para manejar y codificar lo que sucede nuevamente en otras secuencias de comandos. Como el movimiento de la cámara, el movimiento del suelo, el movimiento de la parte del cuerpo, la regeneración de la salud cuando se cumplen ciertos requisitos. Eventos de encendido, destrucción de objetos en eventos de integridad cero. Ganar puntos, etc

Piense en ello como una forma más reutilizable y versátil unity eventos que todos los aspirantes a desarrolladores de YouTube no usan correctamente.

.
[ad_2]

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto le daremos una posible solucion , muchas gracias

por hoy,espero que te funcione

¿Te ha resultado útil??

0 / 0

Deja una respuesta 0

Your email address will not be published. Required fields are marked *