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

Игра юнити 2д

MR_krak Ученик (150), на голосовании 1 месяц назад
Делаю игру в 2д на юнити(C#) столкнулся с проблемой, у меня в игре вид с верху, ходит герой, и бегают слаймы за героем, мне надо написать код, чтобы слаймы поворачивались, в зависимости, от х игрока (планировал написать что то вроде если х игрока меньше х слайма, то слайм меняет свой размер на -размер, но в чем то не разобрался) пока код для слайма следующий:

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;
}
}
Голосование за лучший ответ
Роман Сергеев Мастер (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);
}
}


В этом коде мы проверяем, находится ли игрок слева или справа от слайма, и в зависимости от этого уменьшаем или увеличиваем размер слайма. Вы можете настроить скорость и величину изменения размера слайма, чтобы добиться желаемого эффекта.
Похожие вопросы