Ich möchte 10 Punkte gewinnen, wenn der Spieler einen Gegner tötet, aber ich verstehe es nicht. Ich habe eine Methode erstellt, um Punkte auf meinem PuntosPistas
Skript im Player hinzuzufügen, und rufen Sie einfach die Methode innerhalb der CheckHealth
des Feindes, aber es summieren nicht 10 Punkte in der Punktzahl. Kann mir jemand helfen? Dies ist mein Code:Erhalte Punkte, wenn der Spieler einen Gegner tötet
In dem Feind:
public class v_AIMotor : vCharacter
{
GameObject Player;
void Start()
{
Player = GameObject.FindGameObjectWithTag("Player");
}
public void CheckHealth()
{
if (currentHealth <= 0 && !isDead)
{
isDead = true;
Player.GetComponent<PuntosPistas>().KillEnemy();
print("10 points”);
DisableActions();
}
}
}
Im Spieler:
public class PuntosPistas : MonoBehaviour
{
public int Score;
public Text TextoContador;
void Start()
{
Score = PlayerPrefs.GetInt("Score");
TextoContador.text = "" + Score;
}
public void KillEnemy()
{
Score = Score + 10;
TextoContador.text = "" + Score;
PlayerPrefs.SetInt("Score",Score);
}
}
Entschuldigen Sie! Dies ist der vollständige Code, wo ich CheckHealth() aufrufen:
#region AI Health
GameObject Player;
void Start()
{
Player = GameObject.FindGameObjectWithTag("Player");
}
public void CheckHealth()
{
if (currentHealth <= 0 && !isDead)
{
isDead = true;
Player.GetComponent<PuntosPistas>().KillEnemy();
DisableActions();
}
}
public void HealthRecovery()
{
if (currentHealth <= 0) return;
if (currentHealthRecoveryDelay > 0)
{
currentHealthRecoveryDelay -= Time.deltaTime;
}
else
{
if (currentHealth > maxHealth)
currentHealth = maxHealth;
if (currentHealth < maxHealth)
currentHealth = Mathf.Lerp(currentHealth, maxHealth, healthRecovery * Time.deltaTime);
}
}
protected void RemoveComponents()
{
if (_capsuleCollider != null) Destroy(_capsuleCollider);
if (_rigidbody != null) Destroy(_rigidbody);
if (animator != null) Destroy(animator);
if (agent != null) Destroy(agent);
var comps = GetComponents<MonoBehaviour>();
foreach (Component comp in comps) Destroy(comp);
}
public override void TakeDamage(Damage damage)
{
if (rolling || currentHealth <= 0) return;
if (canSeeTarget() && !damage.ignoreDefense && !actions && CheckChanceToRoll()) return;
// change to block an attack
StartCoroutine(CheckChanceToBlock(chanceToBlockAttack, 0));
// defend attack behaviour
if (canSeeTarget() && BlockAttack(damage)) return;
// instantiate hit particle
var hitRotation = Quaternion.LookRotation(new Vector3(transform.position.x, damage.hitPosition.y, transform.position.z) - damage.hitPosition);
SendMessage("TriggerHitParticle", new HittEffectInfo(new Vector3(transform.position.x, damage.hitPosition.y, transform.position.z), hitRotation, damage.attackName), SendMessageOptions.DontRequireReceiver);
// apply damage to the health
currentHealth -= damage.value;
currentHealthRecoveryDelay = healthRecoveryDelay;
// apply tag from the character that hit you and start chase
if (!sphereSensor.passiveToDamage && damage.sender != null)
{
target = damage.sender;
currentState = AIStates.Chase;
sphereSensor.SetTagToDetect(damage.sender);
if (meleeManager != null)
meleeManager.SetTagToDetect(damage.sender);
}
// trigger hit sound
if (damage.sender != null)
damage.sender.SendMessage("PlayHitSound", SendMessageOptions.DontRequireReceiver);
// update the HUD display
if (healthSlider != null)
healthSlider.Damage(damage.value);
// trigger the HitReaction when the AI take the damage
var hitReactionConditions = stepUp || climbUp || jumpOver || quickTurn || rolling;
if (animator != null && animator.enabled && !damage.activeRagdoll && !hitReactionConditions)
{
animator.SetInteger("Recoil_ID", damage.recoil_id);
animator.SetTrigger("HitReaction");
}
// turn the ragdoll on if the weapon is checked with 'activeRagdoll'
if (damage.activeRagdoll)
transform.SendMessage("ActivateRagdoll", SendMessageOptions.DontRequireReceiver);
CheckHealth();
}
#endregion
Und das ist der Fehler in der Konsole:
Nullreferenceexception: Objektverweis nicht auf eine Instanz eines Objekts Invector.v_AIMotor.CheckHealth gesetzt () (bei Assets/Invector-3rdPersonController/Scripts/CharacterAI/v_AIMotor.cs: 504) Invector.v_AIMotor.TakeDamage (.Damage Schaden) (bei Assets/Invector-3rdPersonController/Scripts/CharacterAI/v_AIMotor.cs: 582) UnityEngine .Component: SendMessage (String, Objekt, SendMessageOptions) vMeleeManager: OnDamageHit (HitInfo) (bei Assets/Invector-3rdPersonCon troller/Skripte/MeleeCombat/vMeleeManager.cs: 295) UnityEngine.Component: SendMessageUpwards (String, Objekt, SendMessageOptions) Invector.vHitBox: CheckHitProperties (Collider) (bei Assets/Invector-3rdPersonController/Scripts/MeleeCombat/vHitBox.cs: 68) Invector.vHitBox: OnTriggerEnter (Collider) (bei Aktiva/Invector-3rdPersonController/Scripts/MeleeCombat/vHitBox.cs: 48)
Wo rufen Sie 'CheckHealth()' Methode? –
Bitte formatieren Sie Ihren Code richtig –