loliks2D  
          
              
                16.Сентябрь.2021 18:52:44
               
              #1 
           
         
        
          я хочу чтоб когда условный Enemy дотрагивался до объекта с тегом player он наносид ему урон и это делают строчки ниже, но проблема в том что сносится только два оно сносит с 10 до 8 и всё
  private void OnTriggerStay2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            if (TimeBtwAttack <= 0)
            {
                anim.SetTrigger("IsAttack");
            }
            else
            {
                TimeBtwAttack -= Time.deltaTime;
            }
        }
    }
    public void OnEnnemyAttack()
    {
        player.health -= damage;
        TimeBtwAttack = StartTimeBtwAttack;
    }
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
    public float Speed;
    private float TimeBtwAttack;
    public float StartTimeBtwAttack;
    public int damage;
    public int healt;
    private Transform target;
    private Tower player;
    private float StartPosX;
    private float StartPosY;
    private bool isBeingHeld = false;
    private Animator anim;
    private void Start()
    {
        target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
        player = FindObjectOfType<Tower>();
        anim = GetComponent<Animator>();
    }
    void Update()
    {
        if (isBeingHeld == true)
        {
            Vector3 mousePos;
            mousePos = Input.mousePosition;
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);
            this.gameObject.transform.localPosition = new Vector3(mousePos.x - StartPosX, mousePos.y - StartPosY, 0);
        }
        transform.position = Vector2.MoveTowards(transform.position, target.position, Speed * Time.deltaTime);
    }
    private void OnTriggerStay2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            if (TimeBtwAttack <= 0)
            {
                anim.SetTrigger("IsAttack");
            }
            else
            {
                TimeBtwAttack -= Time.deltaTime;
            }
        }
    }
    public void OnEnnemyAttack()
    {
        player.health -= damage;
        TimeBtwAttack = StartTimeBtwAttack;
    }
    
    private void OnMouseDown()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 mousePos;
            mousePos = Input.mousePosition;
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);
            StartPosX = mousePos.x - this.gameObject.transform.localPosition.x;
            StartPosY = mousePos.y - this.gameObject.transform.localPosition.y;
            isBeingHeld = true;
        }
    }
    private void OnMouseUp()
    {
        isBeingHeld = false;
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Wall"))
        {
            Destroy(gameObject);
        }
    }
}
 
        
           
         
            
       
      
        
          
          
            AlexP  
          
              
                16.Сентябрь.2021 19:42:12
               
              #2 
           
         
        
          А OnEnnemyAttack это откуда, чем вызывается?
         
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                17.Сентябрь.2021 12:38:04
               
              #3 
           
         
        
          Это вызвано через анимацию , там я добавил событие и выбрал функцию  OnEnemyAttack()
         
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                17.Сентябрь.2021 13:45:45
               
              #4 
           
         
        
          Может что-то с анимациями не так?
         
        
           
         
            
       
      
        
          
          
            AlexP  
          
              
                17.Сентябрь.2021 14:53:20
               
              #5 
           
         
        
          Так а добавлено как?
И для начала стоит добавить Debug.Log, чтобы узнать вызывается ли OnTriggerStay2D больше 1 раза, срабатывает ли сравнение тега, правильно ли меняется время.
         
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                17.Сентябрь.2021 16:32:52
               
              #6 
           
         
        
          есть определённая анимация attack она срабатывает из за этих строк
 if (TimeBtwAttack <= 0)
            {
                anim.SetTrigger("IsAttack");
            }
включается тригер IsAttack и из анимации idle переходит к анимации attack и в самой анимации attack есть event с методом OnEnemyAttack
         
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                17.Сентябрь.2021 16:40:51
               
              #7 
           
         
        
          Debug.Log сработал вообще 1 раз
         
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                17.Сентябрь.2021 16:43:11
               
              #8 
           
         
        
          но если я отодвину enemy и он опять дотронется , то Debug.Log работает
         
        
           
         
            
       
      
        
          
          
            AlexP  
          
              
                17.Сентябрь.2021 16:54:26
               
              #9 
           
         
        
          1 раз где именно? Весь OnTriggerStay2D или только условие про анимацию? Надо ж везде Debug.Log добавить, чтоб понять что происходит )
         
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                17.Сентябрь.2021 17:22:02
               
              #12 
           
         
        
          немного исправил код сделал Debug.Log через анимацию Debug работает 3 раза
         
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                17.Сентябрь.2021 18:33:31
               
              #13 
           
         
        
          кстати я ещё сделал так
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
    public float Speed;
    private float TimeBtwAttack;
    public float StartTimeBtwAttack;
    public int damage;
    public int healt;
    private Transform target;
    private Tower player;
    private float StartPosX;
    private float StartPosY;
    private bool isBeingHeld = false;
    private Animator anim;
    private void Start()
    {
        target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
        player = FindObjectOfType<Tower>();
        anim = GetComponent<Animator>();
    }
    void Update()
    {
        if (isBeingHeld == true)
        {
            Vector3 mousePos;
            mousePos = Input.mousePosition;
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);
            this.gameObject.transform.localPosition = new Vector3(mousePos.x - StartPosX, mousePos.y - StartPosY, 0);
        }
        transform.position = Vector2.MoveTowards(transform.position, target.position, Speed * Time.deltaTime);
    }
    private void OnTriggerStay2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            if (TimeBtwAttack <= 0)
            {
                OnEnnemyAttack();
            }
            else
            {
                TimeBtwAttack -= Time.deltaTime;
            }
        }
    }
    public void OnEnnemyAttack()
    {
        Debug.Log("Coll");
    }
    
    private void OnMouseDown()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 mousePos;
            mousePos = Input.mousePosition;
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);
            StartPosX = mousePos.x - this.gameObject.transform.localPosition.x;
            StartPosY = mousePos.y - this.gameObject.transform.localPosition.y;
            isBeingHeld = true;
        }
    }
    private void OnMouseUp()
    {
        isBeingHeld = false;
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Wall"))
        {
            Destroy(gameObject);
        }
    }
}
чтобы посмотреть проблема в анимке или нет, debug работает но потом останавливается
         
        
           
         
            
       
      
        
          
          
            AlexP  
          
              
                17.Сентябрь.2021 21:43:30
               
              #14 
           
         
        
          
Это как?
Ну и я ж говорю
    private void OnTriggerStay2D(Collider2D other)
    {
        Debug.Log("OnTriggerStay2D");
        if (other.CompareTag("Player"))
        {
            Debug.Log("Triggered on Player. TimeBtwAttack: " + TimeBtwAttack);
            if (TimeBtwAttack <= 0)
            {
                Debug.Log("Attack");
                OnEnnemyAttack();
            }
            else
            {
                TimeBtwAttack -= Time.deltaTime;
            }
        }
    }
 
        
           
         
            
       
      
        
          
          
            loliks2D  
          
              
                18.Сентябрь.2021 06:48:57
               
              #15 
           
         
        
          проблема решена, у RigidBody2D в Sleeping Mode надо поставить Never Sleep чтоб RigidBody не уходил в сон и работал