【发布时间】:2021-12-28 16:44:08
【问题描述】:
我已经为大学做游戏已经有一段时间了,当我要制作一个敌人探测玩家来攻击他时,我碰壁了。敌人只是看不到玩家,事实上他什么也看不到。我尝试了所有图层和对象,但他只是站着不动。(我还没有对他实施任何动作,因为我想先解决这个问题)。让他攻击的唯一方法是否定“if (PlayerInSight())”,这是有道理的,因为它现在一直返回 true,所以这并没有真正的帮助。这是目前近战敌人的整个脚本。帮助表示赞赏。
using UnityEngine;
public class Melee : MonoBehaviour
{
[SerializeField] private float attackCooldown;
[SerializeField] private float range;
[SerializeField] private float colliderDistance;
[SerializeField] private int damage;
[SerializeField] private BoxCollider2D boxCollider;
[SerializeField] private LayerMask playerLayer;
private float cooldownTimer = Mathf.Infinity;
private Animator anim;
private Health playerHealth;
private void Awake()
{
anim = GetComponent<Animator>();
}
private void Update()
{
cooldownTimer += Time.deltaTime;
//atakuj tylko kiedy przeciwnik widzi gracza
if (PlayerInSight())
{
if (cooldownTimer >= attackCooldown)
{
cooldownTimer = 0;
anim.SetTrigger("Attack");
}
}
}
private bool PlayerInSight()
{
RaycastHit2D hit =
Physics2D.BoxCast(boxCollider.bounds.center + transform.right * range * transform.localScale.x * colliderDistance,
new Vector3(boxCollider.bounds.size.x * range, boxCollider.bounds.size.y, boxCollider.bounds.size.z),
0, Vector2.left, 0, playerLayer);
if (hit.collider != null)
playerHealth = hit.transform.GetComponent<Health>();
return hit.collider != null;
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawWireCube(boxCollider.bounds.center + transform.right * range * transform.localScale.x * colliderDistance,
new Vector3(boxCollider.bounds.size.x * range, boxCollider.bounds.size.y, boxCollider.bounds.size.z));
}
private void DamagePlayer()
{
if (PlayerInSight())
playerHealth.TakeDamage(damage);
}
}
【问题讨论】:
-
你是如何设置播放器掩码的。就像您将其设置为仅检测玩家一样