Unity 2D следует за противником позади игрока, избегая препятствийC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Unity 2D следует за противником позади игрока, избегая препятствий

Сообщение Anonymous »

У меня возникла проблема с использованием этого скрипта. Не могли бы вы помочь новичку?
Мне нужно, чтобы враг преследовал игрока и обходил препятствия. Игра сверху
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class enemy : MonoBehaviour
{
public float speed = 5f;
public float maxSpeed = 10f;
public float avoidanceForceMultiplier = 5f;
public float raySpacing = 0.5f;
public LayerMask obstacleLayerMask;

private Rigidbody2D rb;
private Transform Player;

private void Start()
{
rb = GetComponent();
Player = GameObject.FindGameObjectWithTag("Player").GetComponent();
}

private void Update()
{
// Determine direction of movement
Vector2 playerDirection = (Player.position - transform.position).normalized;

// Cast rays to detect obstacles
RaycastHit2D[] hits = new RaycastHit2D[3];
Vector2 rayStart = transform.position * playerDirection * rb.velocity.magnitude * Time.deltaTime;

for (int i = 0; i < 3; i++)
{
Vector2 rayDirection = Quaternion.AngleAxis((i - 1) * 30f, Vector3.forward) * playerDirection;
hits = Physics2D.Raycast(rayStart, rayDirection, raySpacing, obstacleLayerMask);
Debug.DrawRay(rayStart, rayDirection * raySpacing, Color.red);
}

// Calculate avoidance force
Vector2 avoidanceForce = Vector2.zero;

foreach (RaycastHit2D hit in hits)
{
if (hit.collider != null)
{
float distanceToObstacle = Vector2.Distance(transform.position, hit.collider.transform.position);
float distanceToRay = Vector2.Distance(rayStart, hit.point);
avoidanceForce += Vector2.Lerp(playerDirection, hit.normal, distanceToRay / distanceToObstacle) * avoidanceForceMultiplier;
}
}

// Apply avoidance force to velocity
rb.AddForce(avoidanceForce);

// Normalize velocity to max speed
if (rb.velocity.magnitude > maxSpeed)
{
rb.velocity = rb.velocity.normalized * maxSpeed;
}

// Move towards player
rb.velocity += playerDirection * speed * Time.deltaTime;
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -obstacles
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»