Задать вопрос
  • Как вызвать класс из другого скрипта (прикреплены к одному объекту)?

    hiniks
    @hiniks Автор вопроса
    K0TlK,
    public class combatPlaye: MonoBehaviour
    {

    public Animator anim;
    public Transform AttackPoint;
    public float attackRange = 0.5f;
    public LayerMask enemyLayers;
    public Vector2 moveVector;

    public int attackDamage = 40;
    public float attackRate = 2f;
    float nextAttackTime = 0f;

    void Update()
    {
    if(Time.time >= nextAttackTime)
    {
    if (Input.GetKeyDown(KeyCode.F))
    {
    Attack();
    nextAttackTime = Time.time + 1f / attackRate;
    }
    }


    }

    void Attack()
    {
    // АНІМАЦІЯ АТАКИ
    anim.SetTrigger("Attack");
    //АТАКА
    Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(AttackPoint.position, attackRange, enemyLayers);
    //ХТО ПОЛУЧАЄ УРОН
    foreach(Collider2D enemy in hitEnemies)
    {
    enemy.GetComponent().TakeDamage(attackDamage);

    }
    }

    void OnDrawGizmosSelected()
    {
    if (AttackPoint == null)
    return;

    Gizmos.DrawWireSphere(AttackPoint.position, attackRange);
    }

    public void Stop()
    { //TRY WRITE this.enabled = true;
    this.enabled = false;
    }

    }

    второй скрипт -

    [RequireComponent(typeof(combatPlaye))]
    public class Player : MonoBehaviour
    {
    public Rigidbody2D rb;
    public Vector2 moveVector;
    public float speed = 3.5f;
    public float jumpForce = 6f;
    public Animator anim;
    public SpriteRenderer sr;
    public bool onGround;
    public Transform GroundCheck;
    public float checkRadius = 0.5f;
    public LayerMask Ground;
    public static Player Instance { get; set; }
    [SerializeField] private int lives = 5;

    void Start()
    {
    rb = GetComponent();
    anim = GetComponent();
    sr = GetComponent();
    _combatPlaye = GetComponent();
    Instance = this;
    }

    void Update()
    {
    Walk();
    Jump();
    Flip();
    CheckingGround();
    }

    //ХОДЬБА

    void Walk()
    {
    moveVector.x = Input.GetAxis("Horizontal");
    anim.SetFloat("MoveX" , Mathf.Abs(moveVector.x));
    rb.velocity = new Vector2(moveVector.x * speed, rb.velocity.y);
    }

    //ПРИЖОК

    void Jump()
    {
    if(Input.GetKeyDown(KeyCode.Space) && onGround)
    {
    rb.velocity = new Vector2 (rb.velocity.x, jumpForce);
    }
    }

    void Flip()
    {
    if(moveVector.x > 0)
    {
    sr.flipX = false;
    }
    else if (moveVector.x < 0)
    {
    sr.flipX = true;
    }
    }

    void CheckingGround()
    {
    onGround = Physics2D.OverlapCircle(GroundCheck.position, checkRadius, Ground);
    anim.SetBool("onGround", onGround);
    }

    public void GetDamage()
    {
    lives -=1;
    Debug.Log(lives);
    }

    private combatPlaye _combatPlaye;

    void Stoper()
    {
    if(moveVector.x > 0)
    {
    Stop();
    }
    }

    }
  • Как вызвать класс из другого скрипта (прикреплены к одному объекту)?

    hiniks
    @hiniks Автор вопроса
    K0TlK,

    623779d8e1c0d450272419.png

    623779e265bef567164632.png
    623779e62c6fe121680110.png
    623779f210aa2364515932.png

    623779f831b62260990124.png

    привет, я сделал все также как и у вас но почему то ничего не вышло такая ошибка Assets\scripts\Player.cs(90,13): error CS0103: The name 'Stop' does not exist in the current context
  • Как вызвать класс из другого скрипта (прикреплены к одному объекту)?

    hiniks
    @hiniks Автор вопроса
    В каком скрипте нужно это вписать? не много не понятно что делать дальше как ее вызвать?
  • Почему у меня персонаж бьет только вправо даже когда я смотрю влево - unity 2D?

    hiniks
    @hiniks Автор вопроса
    K0TlK, да, у меня есть AttackPoint, а если вам не сложно вы бы могли поправить код чтобы урон давался туда куда персонаж смотрит, или кинуть ссылку где можно сделать.