Мне нужно получить доступ к свойству «canSeePlayer» в скрипте playerController из скрипта врагов.C#

Место общения программистов C#
Ответить
Anonymous
 Мне нужно получить доступ к свойству «canSeePlayer» в скрипте playerController из скрипта врагов.

Сообщение Anonymous »

Я устал как мог, но безрезультатно. Мне нужно закодировать его так, чтобы я мог использовать его, даже если есть несколько объектов с одним и тем же кодом, который я могу использовать. Я использую простой метод ray cast, чтобы проверить, находится ли игрок в области триггера или нет.
Я хочу использовать «canSeePlayer» в качестве логического значения в операторе if в playerController. Таким образом, если игрок входит в зону срабатывания любого врага на карте, он показывает экран окончания игры.
Код врагов:

Код: Выделить всё

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class enemies : MonoBehaviour
{

public GameObject playerRef;

public LayerMask targetLayer;
public LayerMask obstructionLayer;

public bool canSeePlayer { get; private set; }

private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Bullets"))
{
Destroy(gameObject);

}

}

private void Start()
{
playerRef = GameObject.FindGameObjectWithTag("Player");
//StartCoroutine(FOVcheck());
}

private void OnTriggerStay2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
Vector2 dicrectionToTarget = (playerRef.transform.position - transform.position).normalized;

float distanceToTarget = Vector2.Distance(transform.position, playerRef.transform.position);

canSeePlayer = !Physics2D.Raycast(transform.position, dicrectionToTarget,distanceToTarget, obstructionLayer);

}

}
private void OnTriggerExit2D(Collider2D collision)
{
if(canSeePlayer)
{
canSeePlayer = false;
}
}
}
а вот playerController:

Код: Выделить всё

using UnityEngine;
using UnityEngine.Rendering;

public class playerController : MonoBehaviour
{
public float moveSpeed = 5f;
public Rigidbody2D rb;
public Weapon weapon;

Vector2 moveDirection;
Vector2 mousePosition;

public void Update()
{
if (Input.GetMouseButtonDown(0))
{
weapon.Fire();
}
}

private void FixedUpdate()
{

float moveX = Input.GetAxisRaw("Horizontal");
float moveY = Input.GetAxisRaw("Vertical");

moveDirection.x = moveX;
moveDirection.y = moveY;
mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

rb.linearVelocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);

Vector2 aimDirection = mousePosition - rb.position;
float aimAngle = Mathf.Atan2(aimDirection.y, aimDirection.x) * Mathf.Rad2Deg - 90f;
rb.rotation = aimAngle;
}

}
Я попытался соединить два сценария, используя «врагов общества, врагов»; но это только для одного префаба, поэтому это не сработает. Я не уверен, что еще я могу сделать, чтобы это заработало, и я растерян.

Подробнее здесь: https://stackoverflow.com/questions/798 ... cript-from
Ответить

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

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

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

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

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