Роман Сергеев
Мастер
(1494)
2 месяца назад
Для поворота слаймов в зависимости от позиции игрока, вы можете использовать следующий код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed;
private Transform target;
private Rigidbody2D rb;
private bool slimingRight = true;
void Start()
{
target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
Vector2 move = new Vector2(rb.position.x, rb.position.y);
Vector2 targetMove = new Vector2(target.position.x, target.position.y);
Vector2 dir = (targetMove - move).normalized;
rb.velocity = dir * speed;
// Поворот слайма в зависимости от положения игрока
if (target.position.x < transform.position.x)
{
if (slimingRight)
{
Flip();
}
}
else
{
if (!slimingRight)
{
Flip();
}
}
}
void Flip()
{
Vector3 currentScale = gameObject.transform.localScale;
currentScale.x *= -1;
gameObject.transform.localScale = currentScale;
slimingRight = !slimingRight;
}
}
В этом коде мы добавили новую логику в FixedUpdate(), которая проверяет, находится ли игрок слева или справа от слайма. Если игрок находится слева от слайма, и слайм смотрит вправо, то мы вызываем метод Flip(), чтобы перевернуть слайма. Если игрок находится справа от слайма, и слайм смотрит влево, то мы также вызываем метод Flip().
Это позволит слаймам поворачиваться в сторону игрока, что создаст более естественное и реалистичное поведение.
Если вы хотите, чтобы слаймы также менялись в размере в зависимости от положения игрока, вы можете добавить следующий код:
void FixedUpdate()
{
// ...
// Изменение размера слайма в зависимости от положения игрока
if (target.position.x < transform.position.x)
{
// Уменьшение размера слайма
transform.localScale = new Vector3(transform.localScale.x - 0.1f, transform.localScale.y - 0.1f, transform.localScale.z);
}
else
{
// Увеличение размера слайма
transform.localScale = new Vector3(transform.localScale.x + 0.1f, transform.localScale.y + 0.1f, transform.localScale.z);
}
}
В этом коде мы проверяем, находится ли игрок слева или справа от слайма, и в зависимости от этого уменьшаем или увеличиваем размер слайма. Вы можете настроить скорость и величину изменения размера слайма, чтобы добиться желаемого эффекта.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed;
private Transform target;
Rigidbody2D rb;
bool slimingRight = true;
float inputHorizontal;
float inputVertical;
void Start()
{
target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
var move = new Vector2(rb.position.x, rb.position.y);
var targetMove = new Vector2(target.position.x, target.position.y);
var dir = (target.position - transform.position).normalized;
rb.velocity = dir * speed;
inputHorizontal = Input.GetAxisRaw("Horizontal");
inputVertical = Input.GetAxisRaw("Vertical");
if (GameObject.FindGameObjectWithTag("Player")position.x <)
{
rb.AddForce(new Vector2(inputHorizontal * speed, 0f));
}
if (inputHorizontal > 0 && !slimingRight)
{
Flip();
}
if (inputHorizontal < 0 && !slimingRight)
{
Flip();
}
}
void Flip()
{
Vector3 currentScale = gameObject.transform.localScale;
currentScale.x *= -1;
gameObject.transform.localScale = currentScale;
slimingRight = !slimingRight;
}
}