Me Ajudem com esse Error!
+2
Weslley
bruxamissi
6 participantes
Página 1 de 1
Me Ajudem com esse Error!
ENTÃO PESSOAL VOU EXPLICAR PARA VOCES ESSE ERROR ESTA DANDO NO SCRIPT DO INIMIGO EU COLOQUEI ELE PARA LINKAR O OBJETO AUTOMATICAMENTE ELE ESTA LINKANDO PERFEITAMENTE E ESTA INDO ATRAS DO PLAYER SÓ QUE QUANDO ELE MORRER ELE NAO ADICIONA +10 ONTOS NO SCORE E EM SEGUIDA DAR ESSE ERROR:
ABAIXO O SCRIPT DO INIMIGO:
OBS: A LINHA 41 ATÉ A 44 ESTÁ COMENTADA POR QUE ESTAVA DANDO ERROR E NAO ESTAVA LINKANDO O OBJETO:
E O INIMIGO NÃO ESTA SENDO DESTRUÍDO APOS A MORTE DEPOIS QUE ELE MORRE ELE FICA CAINDO O MAPA TODO INIFINITAMENTE!
AQUI ESTA O SCRIPT DO SCORE:
EU CHEGUEI A ESSE SCRIPT COM A AJUDA DESSE OUTRO TÓPICO:
https://www.schultzgames.com/t4474-score-ao-matar-inimigo#31347
AVISO: SOU NOVO EM PROGRAMAÇÃO COMECEI A ESTUDAR ESSA SEMANA ESTUDO EM CASA PELA INTERNET E TUTORIAL NO YOUTUBE. :study:
ABAIXO O SCRIPT DO INIMIGO:
- Código:
using UnityEngine;
using CompleteProject;
using UnityEngine.UI;
using System.Collections;
public class EnemyHealth : MonoBehaviour
{
public int startingHealth = 100;
public int currentHealth;
public float sinkSpeed = 2.5f;
public int scoreValue = 10;
public AudioClip deathClip;
Animator anim;
AudioSource enemyAudio;
ParticleSystem hitParticles;
CapsuleCollider capsuleCollider;
bool isDead;
bool isSinking;
ScoreManager sm;
public GameObject ScoreGameObject;//Coloca o GameObject onde o ScoreManager esta ||||| SETA ISSOOOOOOOOO
public GameObject Inimigo; //Inimigo ||||||||||||||||| ISSO TBM
public float DelayDeath;//Daley para a destroy do inimigo
float Ctime;
void Start ()
{
if (ScoreGameObject == null)
ScoreGameObject = GameObject.FindWithTag ("ScoreGameObject");
}
void Awake ()
{
anim = GetComponent <Animator> ();
enemyAudio = GetComponent <AudioSource> ();
hitParticles = GetComponentInChildren <ParticleSystem> ();
/*if(ScoreGameObject == null) {
print ("OK");
sm = ScoreGameObject.GetComponent<ScoreManager> ();
}*/
capsuleCollider = GetComponent <CapsuleCollider> ();
currentHealth = startingHealth;
}
void Update ()
{
if(isSinking)
{
transform.Translate (-Vector3.up * sinkSpeed * Time.deltaTime);
}
}
public void TakeDamage (int amount, Vector3 hitPoint)
{
if(isDead)
return;
enemyAudio.Play ();
currentHealth -= amount;
hitParticles.transform.position = hitPoint;
hitParticles.Play();
if(currentHealth <= 0)
{
Death ();
}
}
void Death ()
{
//print("Death ok");
currentHealth = 0;// setamos a vida pra 0 pra nao ficar negativa
isDead = true;
anim.SetTrigger ("Dead");
enemyAudio.clip = deathClip;
enemyAudio.Play ();
// executamos o metodo StartSinking que não estava sendo usado
StartSinking();
}
public void StartSinking ()
{
GetComponent <UnityEngine.AI.NavMeshAgent> ().enabled = false;
GetComponent <Rigidbody> ().isKinematic = true;
isSinking = true;
print ("Pontos Ok");
sm.score += scoreValue;
Ctime += 1 * Time.deltaTime;
if(Ctime == DelayDeath){
Destroy (Inimigo);
}
}
}
OBS: A LINHA 41 ATÉ A 44 ESTÁ COMENTADA POR QUE ESTAVA DANDO ERROR E NAO ESTAVA LINKANDO O OBJETO:
E O INIMIGO NÃO ESTA SENDO DESTRUÍDO APOS A MORTE DEPOIS QUE ELE MORRE ELE FICA CAINDO O MAPA TODO INIFINITAMENTE!
AQUI ESTA O SCRIPT DO SCORE:
- Código:
using UnityEngine;
using System.Collections;
public class ScoreManager : MonoBehaviour
{
public int score;
public UnityEngine.UI.Text text;//coloca a label(Text UI) aqui
void Update ()
{
text.text = "Score: " + score;
}
}
EU CHEGUEI A ESSE SCRIPT COM A AJUDA DESSE OUTRO TÓPICO:
https://www.schultzgames.com/t4474-score-ao-matar-inimigo#31347
AVISO: SOU NOVO EM PROGRAMAÇÃO COMECEI A ESTUDAR ESSA SEMANA ESTUDO EM CASA PELA INTERNET E TUTORIAL NO YOUTUBE. :study:
Re: Me Ajudem com esse Error!
provavelmente você esqueceu de setar a referencia do objeto da linha 101
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Me Ajudem com esse Error!
não entendi como assim? como faço?weslleyFx escreveu:provavelmente você esqueceu de setar a referencia do objeto da linha 101
Re: Me Ajudem com esse Error!
acredito que a referencia seja nula para sm
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Me Ajudem com esse Error!
ASSIM?
DEU O MESMO ERROR DEPOIS QUE O INIMIGO MORRE
- Código:
if( sm == null)
{
print ("Pontos Ok");
sm.score += scoreValue;
}
DEU O MESMO ERROR DEPOIS QUE O INIMIGO MORRE
Re: Me Ajudem com esse Error!
bruxamissi escreveu:ENTÃO PESSOAL VOU EXPLICAR PARA VOCES ESSE ERROR ESTA DANDO NO SCRIPT DO INIMIGO EU COLOQUEI ELE PARA LINKAR O OBJETO AUTOMATICAMENTE ELE ESTA LINKANDO PERFEITAMENTE E ESTA INDO ATRAS DO PLAYER SÓ QUE QUANDO ELE MORRER ELE NAO ADICIONA +10 ONTOS NO SCORE E EM SEGUIDA DAR ESSE ERROR:
tente colocar o ScoreGameObject = GameObject.FindWithTag ("ScoreGameObject");
dentro do start sem o if;
Re: Me Ajudem com esse Error!
verifique tambem o objeto com a tag : ScoreGameObject, pois se ela tiver uma letra errada ou diminuitiva ou maiscula pode dar erro..fecirineu escreveu:bruxamissi escreveu:ENTÃO PESSOAL VOU EXPLICAR PARA VOCES ESSE ERROR ESTA DANDO NO SCRIPT DO INIMIGO EU COLOQUEI ELE PARA LINKAR O OBJETO AUTOMATICAMENTE ELE ESTA LINKANDO PERFEITAMENTE E ESTA INDO ATRAS DO PLAYER SÓ QUE QUANDO ELE MORRER ELE NAO ADICIONA +10 ONTOS NO SCORE E EM SEGUIDA DAR ESSE ERROR:
tente colocar o ScoreGameObject = GameObject.FindWithTag ("ScoreGameObject");
dentro do start sem o if;
Re: Me Ajudem com esse Error!
FUNCIONOU DO MESMO JEITO ELE LINKOU O OBJETO NORMAL MAIS QUANDO AMTO O INIMIGO ELE DA ESSE ERROR E NAO AUMENTA O SCOREfecirineu escreveu:bruxamissi escreveu:ENTÃO PESSOAL VOU EXPLICAR PARA VOCES ESSE ERROR ESTA DANDO NO SCRIPT DO INIMIGO EU COLOQUEI ELE PARA LINKAR O OBJETO AUTOMATICAMENTE ELE ESTA LINKANDO PERFEITAMENTE E ESTA INDO ATRAS DO PLAYER SÓ QUE QUANDO ELE MORRER ELE NAO ADICIONA +10 ONTOS NO SCORE E EM SEGUIDA DAR ESSE ERROR:
tente colocar o ScoreGameObject = GameObject.FindWithTag ("ScoreGameObject");
dentro do start sem o if;
Re: Me Ajudem com esse Error!
VOCE CONSEGUE FAZER ESSE SCRIPT LINKAR O "GAMEOBJECT" DA LINHA 21 AUTOMATICAMENTE?
POR QUE ESSE É O SCRIPT DO INIMIGO QUE FICA DANDO SPAWN SOZINHO.
[list=linenums]
[*]using UnityEngine;
[*]using CompleteProject;
[*]public class EnemyHealth : MonoBehaviour
[*]{
[*] public int startingHealth = 100;
[*] public int currentHealth;
[*] public float sinkSpeed = 2.5f;
[*] public int scoreValue = 10;
[*] public AudioClip deathClip;
[*] Animator anim;
[*] AudioSource enemyAudio;
[*] ParticleSystem hitParticles;
[*] CapsuleCollider capsuleCollider;
[*] bool isDead;
[*] bool isSinking;
[*] ScoreManager sm;
[*] public GameObject ScoreGameObject;//Coloca o GameObject onde o ScoreManager esta ||||| SETA ISSOOOOOOOOO
[*]piblic GameObject Inimigo;//Inimigo ||||||||||||||||| ISSO TBM
[*]public float DelayDeath;//Daley para a destroy do inimigo
[*]float Ctime;
[*] void Awake ()
[*] {
[*] anim = GetComponent <Animator> ();
[*] enemyAudio = GetComponent <AudioSource> ();
[*] hitParticles = GetComponentInChildren <ParticleSystem> ();
[*]sm = ScoreGameObject.GetComponent<ScoreManager>():
[*] capsuleCollider = GetComponent <CapsuleCollider> ();
[*] currentHealth = startingHealth;
[*] }
[*] void Update ()
[*] {
[*] if(isSinking)
[*] {
[*] transform.Translate (-Vector3.up * sinkSpeed * Time.deltaTime);
[*] }
[*] }
[*] public void TakeDamage (int amount, Vector3 hitPoint)
[*] {
[*] if(isDead)
[*] return;
[*] enemyAudio.Play ();
[*] currentHealth -= amount;
[*]
[*] hitParticles.transform.position = hitPoint;
[*] hitParticles.Play();
[*] if(currentHealth <= 0)
[*] {
[*] Death ();
[*] }
[*] }
[*] void Death ()
[*] {
[*] print("Death ok");
[*] currentHealth = 0;// setamos a vida pra 0 pra nao ficar negativa
[*] isDead = true;
[*] anim.SetTrigger ("Dead");
[*] enemyAudio.clip = deathClip;
[*] enemyAudio.Play ();
[*]
[*] // executamos o metodo StartSinking que não estava sendo usado
[*] StartSinking();
[*] }
[*] public void StartSinking ()
[*] {
[*] GetComponent <UnityEngine.AI.NavMeshAgent> ().enabled = false;
[*] GetComponent <Rigidbody> ().isKinematic = true;
[*] isSinking = true;
[*] sm.score += scoreValue;
[*]Ctime += 1 * Time.deltaTime;
[*]if(Ctime == DelayDeath){
[*] Destroy (Inimigo);
[*]}
[*]}
[*]}
[/list]
POR QUE ESSE É O SCRIPT DO INIMIGO QUE FICA DANDO SPAWN SOZINHO.
[list=linenums]
[*]using UnityEngine;
[*]using CompleteProject;
[*]public class EnemyHealth : MonoBehaviour
[*]{
[*] public int startingHealth = 100;
[*] public int currentHealth;
[*] public float sinkSpeed = 2.5f;
[*] public int scoreValue = 10;
[*] public AudioClip deathClip;
[*] Animator anim;
[*] AudioSource enemyAudio;
[*] ParticleSystem hitParticles;
[*] CapsuleCollider capsuleCollider;
[*] bool isDead;
[*] bool isSinking;
[*] ScoreManager sm;
[*] public GameObject ScoreGameObject;//Coloca o GameObject onde o ScoreManager esta ||||| SETA ISSOOOOOOOOO
[*]piblic GameObject Inimigo;//Inimigo ||||||||||||||||| ISSO TBM
[*]public float DelayDeath;//Daley para a destroy do inimigo
[*]float Ctime;
[*] void Awake ()
[*] {
[*] anim = GetComponent <Animator> ();
[*] enemyAudio = GetComponent <AudioSource> ();
[*] hitParticles = GetComponentInChildren <ParticleSystem> ();
[*]sm = ScoreGameObject.GetComponent<ScoreManager>():
[*] capsuleCollider = GetComponent <CapsuleCollider> ();
[*] currentHealth = startingHealth;
[*] }
[*] void Update ()
[*] {
[*] if(isSinking)
[*] {
[*] transform.Translate (-Vector3.up * sinkSpeed * Time.deltaTime);
[*] }
[*] }
[*] public void TakeDamage (int amount, Vector3 hitPoint)
[*] {
[*] if(isDead)
[*] return;
[*] enemyAudio.Play ();
[*] currentHealth -= amount;
[*]
[*] hitParticles.transform.position = hitPoint;
[*] hitParticles.Play();
[*] if(currentHealth <= 0)
[*] {
[*] Death ();
[*] }
[*] }
[*] void Death ()
[*] {
[*] print("Death ok");
[*] currentHealth = 0;// setamos a vida pra 0 pra nao ficar negativa
[*] isDead = true;
[*] anim.SetTrigger ("Dead");
[*] enemyAudio.clip = deathClip;
[*] enemyAudio.Play ();
[*]
[*] // executamos o metodo StartSinking que não estava sendo usado
[*] StartSinking();
[*] }
[*] public void StartSinking ()
[*] {
[*] GetComponent <UnityEngine.AI.NavMeshAgent> ().enabled = false;
[*] GetComponent <Rigidbody> ().isKinematic = true;
[*] isSinking = true;
[*] sm.score += scoreValue;
[*]Ctime += 1 * Time.deltaTime;
[*]if(Ctime == DelayDeath){
[*] Destroy (Inimigo);
[*]}
[*]}
[*]}
[/list]
Re: Me Ajudem com esse Error!
Ja pensou em usar Singleton?
- Código:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class ScoreManager : MonoBehaviour
{
public static ScoreManager Singleton{get; private set;}
int score;
Text text;
void Awake ()
{
Singleton = this;
text = GetComponent <Text> ();
score = 0;
}
void Update ()
{
text.text = "Score: " + score;
}
public void AddScore(int ammount)
{
print("AddScore ok");
score += ammount;
}
}
- Código:
ScoreManager.Singleton.SeuMetodo();
- Código:
ScoreManager.Singleton.AddScore(scoreValue);
Re: Me Ajudem com esse Error!
Entao no caso os Script ficaria assim:
Inimigo:
Score:
NAO FUNCIONOU ESTA DANDO ERROR:
Inimigo:
- Código:
using UnityEngine;
using CompleteProject;
using UnityEngine.UI;
using System.Collections;
public class EnemyHealth : MonoBehaviour
{
public int startingHealth = 100;
public int currentHealth;
public float sinkSpeed = 2.5f;
public int scoreValue = 10;
public AudioClip deathClip;
Animator anim;
AudioSource enemyAudio;
ParticleSystem hitParticles;
CapsuleCollider capsuleCollider;
bool isDead;
bool isSinking;
ScoreManager sm;
public GameObject ScoreGameObject;//Coloca o GameObject onde o ScoreManager esta ||||| SETA ISSOOOOOOOOO
public GameObject Inimigo; //Inimigo ||||||||||||||||| ISSO TBM
public float DelayDeath;//Daley para a destroy do inimigo
float Ctime;
void Start ()
{
if (ScoreGameObject == null)
ScoreGameObject = GameObject.FindWithTag ("ScoreGameObject");
}
void Awake ()
{
anim = GetComponent <Animator> ();
enemyAudio = GetComponent <AudioSource> ();
hitParticles = GetComponentInChildren <ParticleSystem> ();
//print ("OK");
//sm = ScoreGameObject.GetComponent<ScoreManager> ();
capsuleCollider = GetComponent <CapsuleCollider> ();
currentHealth = startingHealth;
}
void Update ()
{
if(isSinking)
{
transform.Translate (-Vector3.up * sinkSpeed * Time.deltaTime);
}
}
public void TakeDamage (int amount, Vector3 hitPoint)
{
if(isDead)
return;
enemyAudio.Play ();
currentHealth -= amount;
hitParticles.transform.position = hitPoint;
hitParticles.Play();
if(currentHealth <= 0)
{
Death ();
}
}
void Death ()
{
//print("Death ok");
currentHealth = 0;// setamos a vida pra 0 pra nao ficar negativa
isDead = true;
anim.SetTrigger ("Dead");
enemyAudio.clip = deathClip;
enemyAudio.Play ();
// executamos o metodo StartSinking que não estava sendo usado
StartSinking();
}
public void StartSinking ()
{
GetComponent <UnityEngine.AI.NavMeshAgent> ().enabled = false;
GetComponent <Rigidbody> ().isKinematic = true;
isSinking = true;
print ("Pontos Ok");
ScoreManager.Singleton.AddScore(scoreValue);
//sm.score += scoreValue;
Ctime += 1 * Time.deltaTime;
if(Ctime == DelayDeath){
Destroy (Inimigo);
}
}
}
Score:
- Código:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class ScoreManager : MonoBehaviour
{
public static ScoreManager Singleton{get; private set;}
int score;
Text text;
void Awake ()
{
Singleton = this;
text = GetComponent <Text> ();
score = 0;
}
void Update ()
{
text.text = "Score: " + score;
}
public void AddScore(int ammount)
{
print("AddScore ok");
score += ammount;
}
}
NAO FUNCIONOU ESTA DANDO ERROR:
Re: Me Ajudem com esse Error!
De uma olhada no seu outro tópico...
https://www.schultzgames.com/t4531-como-faco-para-linkar-gameobject-via-script#31484
https://www.schultzgames.com/t4531-como-faco-para-linkar-gameobject-via-script#31484
rafaelllsd- ProgramadorMaster
- PONTOS : 5242
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: Me Ajudem com esse Error!
bruxamissi escreveu:não entendi como assim? como faço?weslleyFx escreveu:provavelmente você esqueceu de setar a referencia do objeto da linha 101
vc deve colocar assim,onde ta a linha "sm.score += scoreValue;" na sua void, vc apaga e coloca ScoreGameObject.GetComponent<ScoreManager>().score+=scoreValue
diegopds- Mestre
- PONTOS : 3420
REPUTAÇÃO : 52
Idade : 26
Respeito as regras :
Tópicos semelhantes
» Ajuda ae error CS1525: Unexpected symbol `if' como ajeito esse error no script da lanterna?
» Me Ajudem Com esse Menu do Anime Sword Art Online
» me ajudem, dem uma dica de como posso fazer um limitador para esse codigo
» Me ajudem pfv
» Me ajudem
» Me Ajudem Com esse Menu do Anime Sword Art Online
» me ajudem, dem uma dica de como posso fazer um limitador para esse codigo
» Me ajudem pfv
» Me ajudem
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos