DUVIDA JOGO CORRIDA INFINITA
5 participantes
Página 1 de 1
DUVIDA JOGO CORRIDA INFINITA
Bom dia pessoal, estou desenvolvendo um jogo de corrida infinita, esses estilo Subway Suffers e cheguei em uma parte que o player tem que colidir com objetos dai é pra ele morrer e ir direto pro menu de morte mas por algum motivo isso não ta acontecendo, o player não morre mesmo eu adicionando uma tag chamada "Inimigo" no objeto que ele colide, então queria pedir a ajuda de vocês pra resolver isso desda já agradeço!!!
Esses são os Scripts...
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using UnityEngine.UI;
public class DeathMenu : MonoBehaviour {
public Text scoreText;
public Image backgroundImg;
private bool isShowned = false;
private float transition = 0.0f;
// Use this for initialization
void Start () {
gameObject.SetActive (false);
}
// Update is called once per frame
void Update () {
if(!isShowned)
return;
transition += Time.deltaTime;
backgroundImg.color = Color.Lerp(new Color(0,0,0,0),Color.black,transition);
}
public void ToggleEndMenu(float score)
{
gameObject.SetActive (true);
scoreText.text = ((int)score).ToString ();
isShowned = true;
}
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene ().name);
}
public void ToMenu()
{
SceneManager.LoadScene("Menu");
}
}
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
private void onControllerColliderHit(ControllerColliderHit hit)
{
if(hit.point.z > transform.position.z + 0.1f && hit.gameObject.tag == "Enemy")
Death ();
}
private void Death()
{
isDead = true;
GetComponent<Score> ().onDeath ();
}
}
Esses são os Scripts...
- Código:
DeathMenu
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using UnityEngine.UI;
public class DeathMenu : MonoBehaviour {
public Text scoreText;
public Image backgroundImg;
private bool isShowned = false;
private float transition = 0.0f;
// Use this for initialization
void Start () {
gameObject.SetActive (false);
}
// Update is called once per frame
void Update () {
if(!isShowned)
return;
transition += Time.deltaTime;
backgroundImg.color = Color.Lerp(new Color(0,0,0,0),Color.black,transition);
}
public void ToggleEndMenu(float score)
{
gameObject.SetActive (true);
scoreText.text = ((int)score).ToString ();
isShowned = true;
}
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene ().name);
}
public void ToMenu()
{
SceneManager.LoadScene("Menu");
}
}
- Código:
PlayerMotor
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
private void onControllerColliderHit(ControllerColliderHit hit)
{
if(hit.point.z > transform.position.z + 0.1f && hit.gameObject.tag == "Enemy")
Death ();
}
private void Death()
{
isDead = true;
GetComponent<Score> ().onDeath ();
}
}
Re: DUVIDA JOGO CORRIDA INFINITA
amigo ,poste os scripts dentro da caixinha script, para os usuarios entenderem melhor e saber onde esta o erro, fora da caixinha algumas palavras /letras desaparecem, bom dia
Re: DUVIDA JOGO CORRIDA INFINITA
foi erro meu mesmo foi mal...felipehobs1 escreveu:amigo ,poste os scripts dentro da caixinha script, para os usuarios entenderem melhor e saber onde esta o erro, fora da caixinha algumas palavras /letras desaparecem, bom dia
- Código:
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using UnityEngine.UI;
public class DeathMenu : MonoBehaviour {
public Text scoreText;
public Image backgroundImg;
private bool isShowned = false;
private float transition = 0.0f;
// Use this for initialization
void Start () {
gameObject.SetActive (false);
}
// Update is called once per frame
void Update () {
if(!isShowned)
return;
transition += Time.deltaTime;
backgroundImg.color = Color.Lerp(new Color(0,0,0,0),Color.black,transition);
}
public void ToggleEndMenu(float score)
{
gameObject.SetActive (true);
scoreText.text = ((int)score).ToString ();
isShowned = true;
}
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene ().name);
}
public void ToMenu()
{
SceneManager.LoadScene("Menu");
}
}
Re: DUVIDA JOGO CORRIDA INFINITA
- Código:
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
private void onControllerColliderHit(ControllerColliderHit hit)
{
if(hit.point.z > transform.position.z + 0.1f && hit.gameObject.tag == "Enemy")
Death ();
}
private void Death()
{
isDead = true;
GetComponent ().onDeath ();
}
}
Re: DUVIDA JOGO CORRIDA INFINITA
Utilize o OnCollisionEnter no player, que quando ele colidir com o Inimigo ele morra, que acho que terá um flow melhor:
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.layer == LayerMask.NameToLayer("Inimigo"))
Debug.Log("Morri...");
}
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html
Re: DUVIDA JOGO CORRIDA INFINITA
tente a dica do amigo acima, e sempre dê um Debug.Log(string msg) depois de cada funcao para ver se aquela funcao esta sendo executada
Re: DUVIDA JOGO CORRIDA INFINITA
Onde eu ponho essa parte em meu codigo?? pois tô meio perdidorecagonlei escreveu:Utilize o OnCollisionEnter no player, que quando ele colidir com o Inimigo ele morra, que acho que terá um flow melhor:
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.layer == LayerMask.NameToLayer("Inimigo"))
Debug.Log("Morri...");
}
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html
Re: DUVIDA JOGO CORRIDA INFINITA
No script de movimento do player... Dai, quando ele se chocar com algum collider, essa callback é chamada e com a detecção da tag, chamada a função de morte do player...
Re: DUVIDA JOGO CORRIDA INFINITA
Obrigado amigo, teria como vc me mandar esse mesmo script com essa parte do codigo ja incluso nele?? Pois a duvida é onde colocar essa parte que me mandou no meu script, então ja agradeço se puder fazer isso!!!recagonlei escreveu:No script de movimento do player... Dai, quando ele se chocar com algum collider, essa callback é chamada e com a detecção da tag, chamada a função de morte do player...
Re: DUVIDA JOGO CORRIDA INFINITA
apenas substitua a funcao
- Código:
private void onControllerColliderHit(ControllerColliderHit hit)
Re: DUVIDA JOGO CORRIDA INFINITA
felipehobs1 escreveu:apenas substitua a funcaoe ve se funciona
- Código:
private void onControllerColliderHit(ControllerColliderHit hit)
Continua sem funcionar olha se coloquei certo no script...
- Código:
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
void OnCollisionEnter(Collision col){
if(col.gameObject.layer == LayerMask.NameToLayer("Enemy"))
Debug.Log("Death...");
}
private void Death()
{
isDead = true;
GetComponent<Score> ().onDeath ();
}
}
Re: DUVIDA JOGO CORRIDA INFINITA
tenta assim entao; se certifica q a tag esta correta,obs: "enemy" & "Enemy" maisculas sao diferente de minusculas
[list=linenums]
[*]void OnCollisionEnter(Collision col){
[*] if(col.gameObject.tag =="Enemy")){
[*] Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
[*]}
[*] }
[/list]
[list=linenums]
[*]void OnCollisionEnter(Collision col){
[*] if(col.gameObject.tag =="Enemy")){
[*] Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
[*]}
[*] }
[/list]
Re: DUVIDA JOGO CORRIDA INFINITA
opa ,a caixinha deu um erro
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
Re: DUVIDA JOGO CORRIDA INFINITA
Na unity ta aparecendo uma mensagem que diz: UnityEngine.Debug.Log(Object) mas o player continua sem morrerfelipehobs1 escreveu:opa ,a caixinha deu um erro
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
- Código:
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
private void Death()
{
isDead = true;
GetComponent<Score> ().onDeath ();
}
}
Re: DUVIDA JOGO CORRIDA INFINITA
bom isso qer dizer q ta colidindo com a tag,agora a acao d morte so vc sabe como é,
tipo dpois q colidi o q acontece? como ele morre etc;
assim q IsDead é igual ==true o resto do codigo vai ser ignorado na void update como no seu script vc nao chama nenhum outro,
[list=linenums]
[*]void OnCollisionEnter(Collision col){
[*] if(col.gameObject.tag =="Enemy"){
[*] Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
[*] Death();
[*]}}
[/list]
tipo dpois q colidi o q acontece? como ele morre etc;
assim q IsDead é igual ==true o resto do codigo vai ser ignorado na void update como no seu script vc nao chama nenhum outro,
[list=linenums]
[*]void OnCollisionEnter(Collision col){
[*] if(col.gameObject.tag =="Enemy"){
[*] Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
[*] Death();
[*]}}
[/list]
Re: DUVIDA JOGO CORRIDA INFINITA
Justamente não acontece nada o player continua correndo sem morrerfelipehobs1 escreveu:bom isso qer dizer q ta colidindo com a tag,agora a acao d morte so vc sabe como é,
tipo dpois q colidi o q acontece? como ele morre etc;
assim q IsDead é igual ==true o resto do codigo vai ser ignorado na void update como no seu script vc nao chama nenhum outro,
[list=linenums]
[*]void OnCollisionEnter(Collision col){
[*] if(col.gameObject.tag =="Enemy"){
[*] Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
[*] Death();
[*]}}
[/list]
Re: DUVIDA JOGO CORRIDA INFINITA
pra ele morre vc pode dar um Destroy(gameobject); ou Destroy(gameobject,float tempo);
dependendo, se tiver animacao ele teria q morrer pela animacao,ou recarregar a cena para riniciar, etc
dependendo, se tiver animacao ele teria q morrer pela animacao,ou recarregar a cena para riniciar, etc
Re: DUVIDA JOGO CORRIDA INFINITA
Pior que não tem animação era bater a téla escurecia e iria para o menu de morte, eu não entendo pq não tah dando certofelipehobs1 escreveu:pra ele morre vc pode dar um Destroy(gameobject); ou Destroy(gameobject,float tempo);
dependendo, se tiver animacao ele teria q morrer pela animacao,ou recarregar a cena para riniciar, etc
Re: DUVIDA JOGO CORRIDA INFINITA
mano , só me diz uma coisa, quantos scripts vc ta usando? se necessario poste todos ou mande pm ate 22:00 ainda tou respondendo,
Re: DUVIDA JOGO CORRIDA INFINITA
Mano para falar a real, eu to achoando que tu não sabe nada de programação,tipo tu nem sabe onde colocar o void OnTriggerEnter, e pelo oque eu vi nos seu script, ou você pegou ele pronto na interne ou na asset store do unity,ou por algum motivo que eu não sei ta comentando ele em inglês, só digo uma coisa, se você não souber o básico de programação e ficar pegando scripts pronto talvez nunca consiga fazer seu jogo, é triste mas é a verdade , do que adianta te um script de movimento se você não sabe fazer o player morrer ou sei lá , abrir uma porta, ou algo de tipo se me entendeu , mas espero que você tenha entendido .Diego Felix escreveu:Na unity ta aparecendo uma mensagem que diz: UnityEngine.Debug.Log(Object) mas o player continua sem morrerfelipehobs1 escreveu:opa ,a caixinha deu um erro
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
- Código:
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
private void Death()
{
isDead = true;
GetComponent<Score> ().onDeath ();
}
}
gurgelg752- MembroAvançado
- PONTOS : 2683
REPUTAÇÃO : 19
Áreas de atuação : estudo programação c# nas horas vagas
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Não amigo bom dia, eu não peguei ele pronto eu fiz ele através de um tutorial em inglês q é justamente pra fazer esse tipo de jogo por isso o script ta em inglês, e eu só encontrei esses tutoriais que ensina a fazer o jogo completo dai resolvi seguir esses mas não peguei nada pronto não, agradeço pela sua dica se tiver como me dar uma ajuda também serei grato, Vlw!!!gurgelg752 escreveu:Mano para falar a real, eu to achoando que tu não sabe nada de programação,tipo tu nem sabe onde colocar o void OnTriggerEnter, e pelo oque eu vi nos seu script, ou você pegou ele pronto na interne ou na asset store do unity,ou por algum motivo que eu não sei ta comentando ele em inglês, só digo uma coisa, se você não souber o básico de programação e ficar pegando scripts pronto talvez nunca consiga fazer seu jogo, é triste mas é a verdade , do que adianta te um script de movimento se você não sabe fazer o player morrer ou sei lá , abrir uma porta, ou algo de tipo se me entendeu , mas espero que você tenha entendido .Diego Felix escreveu:Na unity ta aparecendo uma mensagem que diz: UnityEngine.Debug.Log(Object) mas o player continua sem morrerfelipehobs1 escreveu:opa ,a caixinha deu um erro
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
- Código:
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
private void Death()
{
isDead = true;
GetComponent<Score> ().onDeath ();
}
}
Re: DUVIDA JOGO CORRIDA INFINITA
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("Atingi algo, mudando para morto..."); //printa messagem na unity
Death();
}}
private void Death()
{
Debug.Log("Eu morri... Morrendo...");
isDead = true;
GetComponent<Score> ().onDeath ();
}
Substitua essa parte no final e veja se quando atingir o inimigo, ele printe no console. Uma dica: sempre que tiver problemas assim, print todos os métodos e veja quais não está sendo chamado ou algum parâmetro errado, dessa forma o debug fica mais fácil e tu consegue achar seus erros melhores. Sempre que atingir alguém que fosse pra ser o inimigo, pause a aplicação, cheque se o inimigo está com a tag certinho, se foi printado ao menos o Collision entre outos...
Re: DUVIDA JOGO CORRIDA INFINITA
A unica coisa que aparece no jogo é a mensagem UnityEngine.Debug.Log(Object) quando player bate no objeto mais não morrerecagonlei escreveu:
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("Atingi algo, mudando para morto..."); //printa messagem na unity
Death();
}}
private void Death()
{
Debug.Log("Eu morri... Morrendo...");
isDead = true;
GetComponent<Score> ().onDeath ();
}
Substitua essa parte no final e veja se quando atingir o inimigo, ele printe no console. Uma dica: sempre que tiver problemas assim, print todos os métodos e veja quais não está sendo chamado ou algum parâmetro errado, dessa forma o debug fica mais fácil e tu consegue achar seus erros melhores. Sempre que atingir alguém que fosse pra ser o inimigo, pause a aplicação, cheque se o inimigo está com a tag certinho, se foi printado ao menos o Collision entre outos...
Re: DUVIDA JOGO CORRIDA INFINITA
Só uma pergunta, o obstaculo e o player tem collider, algum dos dois tem RigydBody, senão não funciona.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Olha tente tirar o isDead = true; do final
Pois logo acima vc coloca no update que se ela estiver true return, pode ser ai o problema pq automaticamente quando fica true não executa os codigos abaixo.
Pois logo acima vc coloca no update que se ela estiver true return, pode ser ai o problema pq automaticamente quando fica true não executa os codigos abaixo.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Cara eu tirei o IsDead = true; e coloquei um Rigidbody e o collider os 2 tem mas ainda nada de morrer não sei o q é aconteceZecandy escreveu:Olha tente tirar o isDead = true; do final
Pois logo acima vc coloca no update que se ela estiver true return, pode ser ai o problema pq automaticamente quando fica true não executa os codigos abaixo.
Re: DUVIDA JOGO CORRIDA INFINITA
fazo seguinte testa so o
se debugar o problema é no restante acima ou o script de morte eu testei assim deu certo aqui.
Se possivel printa a tela e manda.
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("Atingi algo, mudando para morto..."); //printa messagem na unity
}}
se debugar o problema é no restante acima ou o script de morte eu testei assim deu certo aqui.
Se possivel printa a tela e manda.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Cara não to conseguindo mandar print mais continua aparecendo essa mensagem do Debug UnityEngine.Debug:Log(Object)Zecandy escreveu:fazo seguinte testa so o
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("Atingi algo, mudando para morto..."); //printa messagem na unity
}}
se debugar o problema é no restante acima ou o script de morte eu testei assim deu certo aqui.
Se possivel printa a tela e manda.
Re: DUVIDA JOGO CORRIDA INFINITA
Antes
Depois
Fiz um teste com debug e para aparecer o cubo do lado esquerdo ta funfando.
Depois
Fiz um teste com debug e para aparecer o cubo do lado esquerdo ta funfando.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Era pra ir direto pra tela de game over, não tem animação do player morrendo é bateu no objeto e vai direto pra tela, só ta faltando isso mesmo pra terminar o jogoZecandy escreveu:O que acontece na morte do personagem o que era pra acontecer?
Re: DUVIDA JOGO CORRIDA INFINITA
Uma solução simples pode ajudar.
No projeto vc cria um canvas e coloque um panel, nesse painel coloque um Componente canvasGroup e deixe o alfa em 0, e associa esse painel no script não esquecendo tambem de colocar a cena que deseja la no script, assim que atingir o obstaculo a tela começa a escurecer e assim que ficar totalmente preta depois de dois segundos entra na outra cena.
Espero que ajude, aqui deu certinho.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Teste : MonoBehaviour {
bool isdead = false;
public CanvasGroup painelTransicao;
void Start ()
{
}
void Update ()
{
if (isdead)
{
painelTransicao.alpha += Time.deltaTime;
}
if(painelTransicao.alpha ==1)
{
StartCoroutine(ChamaCena());
}
}
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy")
{
isdead = true;
}
}
IEnumerator ChamaCena()
{
if(painelTransicao.alpha ==1)
{
yield return new WaitForSeconds(2);
SceneManager.LoadScene("NomedaCena");
}
}
}
No projeto vc cria um canvas e coloque um panel, nesse painel coloque um Componente canvasGroup e deixe o alfa em 0, e associa esse painel no script não esquecendo tambem de colocar a cena que deseja la no script, assim que atingir o obstaculo a tela começa a escurecer e assim que ficar totalmente preta depois de dois segundos entra na outra cena.
Espero que ajude, aqui deu certinho.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Tudo bem faz sentido.Diego Felix escreveu:Não amigo bom dia, eu não peguei ele pronto eu fiz ele através de um tutorial em inglês q é justamente pra fazer esse tipo de jogo por isso o script ta em inglês, e eu só encontrei esses tutoriais que ensina a fazer o jogo completo dai resolvi seguir esses mas não peguei nada pronto não, agradeço pela sua dica se tiver como me dar uma ajuda também serei grato, Vlw!!!gurgelg752 escreveu:Mano para falar a real, eu to achoando que tu não sabe nada de programação,tipo tu nem sabe onde colocar o void OnTriggerEnter, e pelo oque eu vi nos seu script, ou você pegou ele pronto na interne ou na asset store do unity,ou por algum motivo que eu não sei ta comentando ele em inglês, só digo uma coisa, se você não souber o básico de programação e ficar pegando scripts pronto talvez nunca consiga fazer seu jogo, é triste mas é a verdade , do que adianta te um script de movimento se você não sabe fazer o player morrer ou sei lá , abrir uma porta, ou algo de tipo se me entendeu , mas espero que você tenha entendido .Diego Felix escreveu:Na unity ta aparecendo uma mensagem que diz: UnityEngine.Debug.Log(Object) mas o player continua sem morrerfelipehobs1 escreveu:opa ,a caixinha deu um erro
- Código:
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
- Código:
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
return;
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}}
private void Death()
{
isDead = true;
GetComponent<Score> ().onDeath ();
}
}
gurgelg752- MembroAvançado
- PONTOS : 2683
REPUTAÇÃO : 19
Áreas de atuação : estudo programação c# nas horas vagas
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Zecandy escreveu:Uma solução simples pode ajudar.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Teste : MonoBehaviour {
bool isdead = false;
public CanvasGroup painelTransicao;
void Start ()
{
}
void Update ()
{
if (isdead)
{
painelTransicao.alpha += Time.deltaTime;
}
if(painelTransicao.alpha ==1)
{
StartCoroutine(ChamaCena());
}
}
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy")
{
isdead = true;
}
}
IEnumerator ChamaCena()
{
if(painelTransicao.alpha ==1)
{
yield return new WaitForSeconds(2);
SceneManager.LoadScene("NomedaCena");
}
}
}
No projeto vc cria um canvas e coloque um panel, nesse painel coloque um Componente canvasGroup e deixe o alfa em 0, e associa esse painel no script não esquecendo tambem de colocar a cena que deseja la no script, assim que atingir o obstaculo a tela começa a escurecer e assim que ficar totalmente preta depois de dois segundos entra na outra cena.
Espero que ajude, aqui deu certinho.
Então no caso eu substituo o meu Script por esse??
Re: DUVIDA JOGO CORRIDA INFINITA
Nao so inclementa com o teste que te passei
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class PlayerMotor : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float speed = 5.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
private float animationDuration = 3.0f;
private float startime;
private bool isDead = false;
public CanvasGroup painelTransicao;
// Use this for initialization
void Start () {
controller = GetComponent<CharacterController> ();
startime = Time.time;
}
// Update is called once per frame
void Update () {
if (isDead)
{
painelTransicao.alpha += Time.deltaTime;
if(painelTransicao.alpha ==1)
{
StartCoroutine(ChamaCena());
}
return;
}
if(Time.time - startime < animationDuration)
{
controller.Move (Vector3.forward * speed * Time.deltaTime);
return;
}
moveVector = Vector3.zero;
if(controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//X - Left and Right
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//Y - Up and Down
moveVector.y = verticalVelocity;
//Z - Foward and Backward
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
}
public void SetSpeed(float modifier)
{
speed = 5.0f + modifier;
}
// It is beign called every time our capsule hits something
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy"){
Debug.Log("morri o codigo esta correto..."); //printa messagem na unity
}
}
IEnumerator ChamaCena()
{
if(painelTransicao.alpha ==1)
{
yield return new WaitForSeconds(2);
SceneManager.LoadScene("NomedaCena");
}
}
}
Ficaria assim no seu player.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: DUVIDA JOGO CORRIDA INFINITA
Amigo vou ter q te incomodar de novo, como faço pra associar o painel no script??Zecandy escreveu:Uma solução simples pode ajudar.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Teste : MonoBehaviour {
bool isdead = false;
public CanvasGroup painelTransicao;
void Start ()
{
}
void Update ()
{
if (isdead)
{
painelTransicao.alpha += Time.deltaTime;
}
if(painelTransicao.alpha ==1)
{
StartCoroutine(ChamaCena());
}
}
void OnCollisionEnter(Collision col){
if(col.gameObject.tag =="Enemy")
{
isdead = true;
}
}
IEnumerator ChamaCena()
{
if(painelTransicao.alpha ==1)
{
yield return new WaitForSeconds(2);
SceneManager.LoadScene("NomedaCena");
}
}
}
No projeto vc cria um canvas e coloque um panel, nesse painel coloque um Componente canvasGroup e deixe o alfa em 0, e associa esse painel no script não esquecendo tambem de colocar a cena que deseja la no script, assim que atingir o obstaculo a tela começa a escurecer e assim que ficar totalmente preta depois de dois segundos entra na outra cena.
Espero que ajude, aqui deu certinho.
Re: DUVIDA JOGO CORRIDA INFINITA
No inspector la no seu script tem uma variavel publica
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Tópicos semelhantes
» Como colocar Cpu num jogo de corrida
» Corrida infinita
» jogo de corrida
» Limit jogo de corrida
» CONTROLE ARCADE PARA JOGO DE CORRIDA
» Corrida infinita
» jogo de corrida
» Limit jogo de corrida
» CONTROLE ARCADE PARA JOGO DE CORRIDA
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos