Dificuldades com programação no Unity 5 2D
3 participantes
Página 1 de 1
Dificuldades com programação no Unity 5 2D
Ola, estou com um problema eu quero que ao meu player encostar no meu inimigo ele sofra dano e quando ele pular no inimigo mate, so que não esta acontecendo exatamente assim meu player ao encostar no inimigo ele sofre dano e mata meu inimigo preciso de ajuda
Player Script
Script do inimigo
Script que dano ao player
Player Script
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerBehaviourScript : MonoBehaviour {
private Rigidbody2D rb;
private Transform tr;
private Animator an;
public Transform verificaChao;
public Transform verificaParede;
public int curHealth;
public int maxHealth = 100;
private bool estaAndando;
private bool estaNoChao;
private bool estaNaParede;
private bool estaVivo;
private bool viradoParaDireita;
private float axis; //Variavel que controla se estou andando direita ou esquerda
public float velocidade;
public float forcaPulo;
public float raioValidaChao; //Valida se o player se ta tocando no chao
public float raioValidaParede;
public LayerMask solido;
void Start () {
rb = GetComponent<Rigidbody2D> ();
tr = GetComponent<Transform> ();
an = GetComponent<Animator> ();
estaVivo = true;
viradoParaDireita = true;
curHealth = maxHealth;
}
void Update () {
estaNoChao = Physics2D.OverlapCircle (verificaChao.position, raioValidaChao, solido);
estaNaParede = Physics2D.OverlapCircle (verificaParede.position, raioValidaParede, solido);
if (estaVivo) {
axis = Input.GetAxisRaw ("Horizontal");
estaAndando = Mathf.Abs (axis) > 0f;
//Verifica se o player esta virando pro lado ou pro outro
if (axis > 0f && !viradoParaDireita)
flip ();
else if (axis < 0f && viradoParaDireita)
flip ();
//Quando player apertar o botao de pulo
if (Input.GetButtonDown ("Jump") && estaNoChao)
rb.AddForce (tr.up * forcaPulo);
Animations ();
if (curHealth > maxHealth) {
curHealth = maxHealth;
}
if (curHealth <= 0) {
Die ();
}
}
}
void FixedUpdate() {
if (estaAndando && !estaNaParede) {
if (viradoParaDireita)
rb.velocity = new Vector2 (velocidade, rb.velocity.y);
else
rb.velocity = new Vector2 (-velocidade, rb.velocity.y);
}
}
void flip () {
viradoParaDireita = !viradoParaDireita;
tr.localScale = new Vector2 (-tr.localScale.x, tr.localScale.y);
}
void Animations(){
an.SetBool("Andando",(estaNoChao && estaAndando));
an.SetBool ("Pulando", !estaNoChao);
an.SetFloat ("VelVertical", rb.velocity.y);
}
void OnDrawGizmosSelected(){
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (verificaChao.position, raioValidaChao);
Gizmos.DrawWireSphere (verificaParede.position, raioValidaParede);
}
void OnTriggerEnter2D(Collider2D other){
if (other.gameObject.CompareTag ("Enemy")) {
other.gameObject.GetComponent<EnemysBehavior> ().enabled = false;
BoxCollider2D[] boxes = other.gameObject.GetComponents < BoxCollider2D> ();
foreach (BoxCollider2D box in boxes) {
box.enabled = false;
}
}
}
void Die (){
SceneManager.LoadScene (SceneManager.GetActiveScene().buildIndex);
}
public void Damage(int dmg){
curHealth -= dmg;
}
public IEnumerator KnockBack(float knockDur,float knockbackPwr, Vector3 knockbackDir){
float timer = 0;
while (knockDur > timer) {
timer += Time.deltaTime;
rb.AddForce (new Vector3 (knockbackDir.x * -100, knockbackDir.y * knockbackPwr, transform.position.z));
}
yield return 0;
}
}
Script do inimigo
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemysBehavior : MonoBehaviour {
private Rigidbody2D rb;
private Transform tr;
private Animator an;
public float jumpForce = 700;
public Transform verificaChao;
public Transform verificaParede;
private bool estaNaParede;
private bool estaNoChao;
private bool viradoParaDireita;
public float velocidade;
public float raioValidaChao; //Valida se o player se ta tocando no chao
public float raioValidaParede;
public LayerMask solido;
void Awake () {
rb = gameObject.GetComponent<Rigidbody2D> ();
tr = GetComponent<Transform> ();
an = GetComponent<Animator> ();
viradoParaDireita = true;
}
// Update is called once per frame
void FixedUpdate () {
EnemyMovements ();
}
void EnemyMovements(){
estaNoChao = Physics2D.OverlapCircle (verificaChao.position, raioValidaChao, solido);
estaNaParede = Physics2D.OverlapCircle (verificaParede.position, raioValidaParede, solido);
if ((!estaNoChao || estaNaParede) && viradoParaDireita)
flip ();
else if((!estaNoChao || estaNaParede)&& !viradoParaDireita)
flip();
if (estaNoChao)
rb.velocity = new Vector2 (velocidade, rb.velocity.y);
}
void flip (){
viradoParaDireita = !viradoParaDireita;
tr.localScale = new Vector2 (-tr.localScale.x, tr.localScale.y);
velocidade *= -1;
}
void OnDrawGizmosSelected(){
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (verificaChao.position, raioValidaChao);
Gizmos.DrawWireSphere (verificaParede.position, raioValidaParede);
}
void OnTriggerEnter2D(Collider2D other){
if (other.gameObject.CompareTag ("Player")) {
BoxCollider2D[] boxes = gameObject.GetComponents<BoxCollider2D> ();
foreach (BoxCollider2D box in boxes) {
box.enabled = false;
}
other.gameObject.GetComponent<Rigidbody2D> ().AddForce (new Vector2 (0, jumpForce));
velocidade = 0;
transform.Rotate (new Vector3 (0, 0, -180));
Destroy (gameObject);
}
}
}
Script que dano ao player
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dano : MonoBehaviour {
private PlayerBehaviourScript Player;
void Start () {
Player = GameObject.FindGameObjectWithTag ("Player").GetComponent<PlayerBehaviourScript> ();
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter2D(Collider2D col){
if (col.CompareTag ("Player")) {
Player.Damage (1);
StartCoroutine (Player.KnockBack (0.02f,350,Player.transform.position));
}
}
}
guilhermeprata- Iniciante
- PONTOS : 2656
REPUTAÇÃO : 0
Respeito as regras :
Re: Dificuldades com programação no Unity 5 2D
você pode posicionar um outro collider na parte de cima do inimigo e verificar a colisão
ou verificar o ponto de impacto ou verificar se o player estava em cima do player em Y era o X determinado para matar o inimigo
ou verificar o ponto de impacto ou verificar se o player estava em cima do player em Y era o X determinado para matar o inimigo
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Dificuldades com programação no Unity 5 2D
coloca um RayCast embaixo do player pra matar o inimigo, se o inimigo encostar no raycast ele morre
Lteo- Avançado
- PONTOS : 2968
REPUTAÇÃO : 27
Idade : 24
Áreas de atuação : Desenvolvedor web
Respeito as regras :
Tópicos semelhantes
» Programação Unity android 2D
» Preciso de ajuda com Programação no Unity
» Dificuldades em destruir ou desativar GameObject...
» Dificuldades em linkar as meshes com a wheel Collider!
» Duvidas sobre Programação, Banco de Dados, PHP/XML em Unity, Json ou PlayerPrefs?
» Preciso de ajuda com Programação no Unity
» Dificuldades em destruir ou desativar GameObject...
» Dificuldades em linkar as meshes com a wheel Collider!
» Duvidas sobre Programação, Banco de Dados, PHP/XML em Unity, Json ou PlayerPrefs?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos