OBJETO INSTANCIANDO EM POSIÇÃO ERRADA
4 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
OBJETO INSTANCIANDO EM POSIÇÃO ERRADA
Fala pessoal então eu estou com um problema eu criei um dinheiro né para ele instancia quando o inimigo morrer, ele instancia o dinheiro so nao instancia na posiçao que o inimigo morre, ele instanciar no meio do mapa, eu queria que ele instanciasse na posiçao que o inimigo morre
Linhas: 10, 103 e 104.
script:
Linhas: 10, 103 e 104.
script:
- Código:
using UnityEngine;
using CompleteProject;
using UnityEngine.UI;
using System.Collections;
using UnityEngineInternal;
public class EnemyHealth : MonoBehaviour
{
//========================================
public GameObject Granaprefab; // OBJETO PARA INSTANCIAR
public int rateDropGrana = 20;
public float expDoInimigo;
private float ExpDeSobra;
//========================================
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 ()
{
StartCoroutine ("Timer");
if (ScoreGameObject == null) {
ScoreGameObject = GameObject.FindWithTag ("ScoreGameObject");
}
}
void Awake ()
{
anim = GetComponent <Animator> ();
enemyAudio = GetComponent <AudioSource> ();
hitParticles = GetComponentInChildren <ParticleSystem> ();
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();
anim.SetTrigger ("Tomo");
anim.SetBool ("voltei", true);
if(currentHealth <= 0)
{
Destroir ();
Death ();
}
}
void Death ()
{
//print("Death ok");
currentHealth = 0;// setamos a vida pra 0 pra nao ficar negativa
isDead = true;
if (EXP.Experiencia + expDoInimigo < EXP.ExpNECESSARIO) {
EXP.Experiencia = EXP.Experiencia + expDoInimigo;
} else if (EXP.Experiencia + expDoInimigo >= EXP.ExpNECESSARIO) {
ExpDeSobra = (EXP.Experiencia + expDoInimigo) - EXP.ExpNECESSARIO;
EXP.NIVEL = EXP.NIVEL + 1;
EXP.Experiencia = ExpDeSobra;
}
anim.SetTrigger ("Dead");
enemyAudio.clip = deathClip;
enemyAudio.Play ();
int randDrop = Random.Range (0, 100);
if (randDrop <= rateDropGrana) {
Instantiate (Granaprefab, transform.position, transform.rotation); //LINHA PARA INSTANCIAR
}
// 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;
}
IEnumerator Timer () {
yield return new WaitForSeconds (0.1f);
sm = ScoreGameObject.GetComponent<ScoreManager> ();
}
public void Destroir () {
Ctime += 1 * Time.deltaTime;
if (Ctime >= DelayDeath) {
Destroy (Inimigo, 3);
}
}
}
Re: OBJETO INSTANCIANDO EM POSIÇÃO ERRADA
bruxamissi escreveu:Fala pessoal então eu estou com um problema eu criei um dinheiro né para ele instancia quando o inimigo morrer, ele instancia o dinheiro so nao instancia na posiçao que o inimigo morre, ele instanciar no meio do mapa, eu queria que ele instanciasse na posiçao que o inimigo morre
Linhas: 10, 103 e 104.
script:
- Código:
using UnityEngine;
using CompleteProject;
using UnityEngine.UI;
using System.Collections;
using UnityEngineInternal;
public class EnemyHealth : MonoBehaviour
{
//========================================
public GameObject Granaprefab; // OBJETO PARA INSTANCIAR
public int rateDropGrana = 20;
public float expDoInimigo;
private float ExpDeSobra;
//========================================
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 ()
{
StartCoroutine ("Timer");
if (ScoreGameObject == null) {
ScoreGameObject = GameObject.FindWithTag ("ScoreGameObject");
}
}
void Awake ()
{
anim = GetComponent <Animator> ();
enemyAudio = GetComponent <AudioSource> ();
hitParticles = GetComponentInChildren <ParticleSystem> ();
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();
anim.SetTrigger ("Tomo");
anim.SetBool ("voltei", true);
if(currentHealth <= 0)
{
Destroir ();
Death ();
}
}
void Death ()
{
//print("Death ok");
currentHealth = 0;// setamos a vida pra 0 pra nao ficar negativa
isDead = true;
if (EXP.Experiencia + expDoInimigo < EXP.ExpNECESSARIO) {
EXP.Experiencia = EXP.Experiencia + expDoInimigo;
} else if (EXP.Experiencia + expDoInimigo >= EXP.ExpNECESSARIO) {
ExpDeSobra = (EXP.Experiencia + expDoInimigo) - EXP.ExpNECESSARIO;
EXP.NIVEL = EXP.NIVEL + 1;
EXP.Experiencia = ExpDeSobra;
}
anim.SetTrigger ("Dead");
enemyAudio.clip = deathClip;
enemyAudio.Play ();
int randDrop = Random.Range (0, 100);
if (randDrop <= rateDropGrana) {
Instantiate (Granaprefab, Inimigo.transform.position, Inimigo.transform.rotation); //LINHA PARA INSTANCIAR
- Código:
}
// 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;
}
IEnumerator Timer () {
yield return new WaitForSeconds (0.1f);
sm = ScoreGameObject.GetComponent<ScoreManager> ();
}
public void Destroir () {
Ctime += 1 * Time.deltaTime;
if (Ctime >= DelayDeath) {
Destroy (Inimigo, 3);
}
}
}
Tenta assim
Re: OBJETO INSTANCIANDO EM POSIÇÃO ERRADA
Script deu uma Bugada mas Tenta
Basicamente Colocar o "Inimigo" na frente do transform.position e transform.rotation
Inimigo.transform.position e Inimigo.transform.rotation
Basicamente Colocar o "Inimigo" na frente do transform.position e transform.rotation
Inimigo.transform.position e Inimigo.transform.rotation
Re: OBJETO INSTANCIANDO EM POSIÇÃO ERRADA
Amigo, eu não entendi muito bem.. E não to tendo tempo pra analisar script e tal. Mais vou te passar uma lógica que possa te ajudar.
Tenta fazer asssim. Crie um script que irá gerenciar o spawner de moedas. Bom. Esse script vai fazer o seguinte... Ele simplesmente vai receber um valor de X, Y ou Z, e vai instanciar a moeda de acordo com esse valor de posição.
Bom. Basicamente sempre que um inimigo morrer, ele vai transmitir sua posição para esse script gerenciador, e vai ativar o script. Assim, o script vai receber a posição do inimigo morto, e vai instanciar a moeda no local da morte. Não tem muito segredo..
Ou então, você pode deixar a moeda como filho do inimigo, mais desativada. Assim quando o inimigo morrer, ele ativa a moeda, e a moeda aparece! Simples!
Tenta fazer asssim. Crie um script que irá gerenciar o spawner de moedas. Bom. Esse script vai fazer o seguinte... Ele simplesmente vai receber um valor de X, Y ou Z, e vai instanciar a moeda de acordo com esse valor de posição.
Bom. Basicamente sempre que um inimigo morrer, ele vai transmitir sua posição para esse script gerenciador, e vai ativar o script. Assim, o script vai receber a posição do inimigo morto, e vai instanciar a moeda no local da morte. Não tem muito segredo..
Ou então, você pode deixar a moeda como filho do inimigo, mais desativada. Assim quando o inimigo morrer, ele ativa a moeda, e a moeda aparece! Simples!
Re: OBJETO INSTANCIANDO EM POSIÇÃO ERRADA
Eu tenho certeza que o script para instancia estar correto mais ele nao instancia na posiçao que o inimigo morre, ele instancia no centro no mapa.
- Código:
int randDrop = Random.Range (0, 100);
if (randDrop <= rateDropGrana) {
Instantiate (Granaprefab, transform.position, transform.rotation);
Re: OBJETO INSTANCIANDO EM POSIÇÃO ERRADA
Vai Simm, eu consegui resolver foi que eu fiz a animaçao do objeto ai a animaçao dele ficou em relaçao a o mundo, consegui resolver ja, Obrigadoo
Tópicos semelhantes
» [Ajuda] Bala indo em posição errada quando estou de costas, jogo 2D
» Como transformo a posição de um objeto em outra posição?
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
» definir posição de um objeto
» Rotacao de objeto (Z) conforme posicao do touch
» Como transformo a posição de um objeto em outra posição?
» Como mudar rotacao de um objeto em relacao a posicao do outro objeto
» definir posição de um objeto
» Rotacao de objeto (Z) conforme posicao do touch
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos