Ich muss über das Feindesskript auf die Eigenschaft „canSeePlayer“ im Skript „playerController“ zugreifenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Ich muss über das Feindesskript auf die Eigenschaft „canSeePlayer“ im Skript „playerController“ zugreifen

Post by Anonymous »

Ich habe so viel müde wie möglich, aber ohne Erfolg. Ich muss es so codieren, dass ich es verwenden kann, auch wenn es mehrere Objekte mit demselben Code gibt. Ich kann es verwenden. Ich verwende einen einfachen Raycast, um zu überprüfen, ob sich der Player in einem Triggerbereich befindet oder nicht.
Ich möchte „canSeePlayer“ als booleschen Wert in einer if-Anweisung in playerController verwenden. Wenn der Spieler also die Auslösezone eines Feindes auf der Karte betritt, wird ein Game-Over-Bildschirm
Gegnercode:
angezeigt

Code: Select all

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;
}
}
}
und hier ist der playerController:

Code: Select all

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;
}

}
Ich habe versucht, die beiden Skripte mit „Public Enemies Enemies“ zu verbinden. Aber das gilt nur für ein einzelnes Fertighaus, also wird es nicht funktionieren. Ich bin mir nicht sicher, was ich sonst noch tun kann, damit es funktioniert, und ich bin ziemlich verloren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post