Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как исправить скрипт?

Платон Круглов Ученик (65), открыт 4 дня назад
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Boss_Run : StateMachineBehaviour
{

public float speed = 2.5f;
public float attackRange = 3f;

Transform player;
Rigidbody2D rb;
Boss boss;

override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
player = GameObject.FindGameObjectWithTag("Player").transform;
rb = animator.GetComponent<Rigidbody2D>();
boss = animator.GetComponent<Boss>();
}

override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
boss.LookAtPlayer();

Vector2 target = new Vector2(player.position.x, rb.position.y);
Vector2 newPos = Vector2.MoveTowards(rb.position, target, speed * Time.fixedDeltaTime);
rb.MovePosition(newPos);

if (Vector2.Distance(player.position, rb.position) <= attackRange)
{
animator.SetTrigger("Attack");
}
}

override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
animator.ResetTrigger("Attack");
}
}

Чтоб не Rigidbody2D передвигался а сам персонаж
2 ответа
Валерий Шумилин Знаток (355) 4 дня назад
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Boss_Run : StateMachineBehaviour
{
public float speed = 2.5f;
public float attackRange = 3f;

Transform player;
Transform bossTransform; // Ссылка на transform босса
Boss boss;


override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
player = GameObject.FindGameObjectWithTag("Player").transform;
bossTransform = animator.transform; // Получаем Transform босса
boss = animator.GetComponent<Boss>();
}

override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
boss.LookAtPlayer();

// Используем Transform для перемещения
Vector2 target = new Vector2(player.position.x, bossTransform.position.y);
Vector2 newPos = Vector2.MoveTowards(bossTransform.position, target, speed * Time.deltaTime); // Time.deltaTime вместо Time.fixedDeltaTime
bossTransform.position = newPos;

if (Vector2.Distance(player.position, bossTransform.position) <= attackRange)
{
animator.SetTrigger("Attack");
}
}

override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
an
imator.ResetTrigger("Attack");
}
}
Платон КругловУченик (65) 4 дня назад
он не двигается с места
Александр Искусственный Интеллект (304694) 4 дня назад
попросить чат жпт поправить...
Платон КругловУченик (65) 4 дня назад
не то он советует
Похожие вопросы