Я делаю FPS-игру и пытаюсь написать метод, который определяет, когда враг меня видит.Я делаю это, используя raycasts.
У меня есть проблема, при которой raycast не всегда попадает в (огромный) коробчатый коллайдер, я ожидаю, что он всегда будет попадать.
Raycastпроисходит из моего скрипта AIShooting, и я ожидаю, что он попадет в коллайдер бокса моего персонажа.
Скрипт AIShooting выглядит так:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AIShooting : MonoBehaviour {
private GameObject _playerCharacter; //reference to the player controlled character
private CharacterController _playerCharacterController;
private Collider _characterCollider;
private GameObject _characterWeapon; //reference to the weapon held by the AI
private int _offSetY = 1; //offset from player controlled character pivot point, so it shoots the character in the center
//private LineRenderer _lineRenderer;
// Use this for initialization
void Start () {
_playerCharacter = GameObject.Find("Character");
_playerCharacterController = _playerCharacter.GetComponent<CharacterController>();
_characterWeapon = _playerCharacter.GetComponent<Character>().EquipedWeapons[0];
_characterCollider = _playerCharacter.GetComponent<BoxCollider>();
}
// Update is called once per frame
void Update () {
this.transform.LookAt(_playerCharacter.transform);
LookForEnemyByShootingRayCast();
}
void LookForEnemyByShootingRayCast()
{
Vector3 _shootTarget = new Vector3(_playerCharacter.transform.position.x, _playerCharacter.transform.position.y + _offSetY, _playerCharacter.transform.position.z);
RaycastHit hit;
if (Physics.Raycast(this.transform.position, _shootTarget, out hit, 10000)) //if the ray cast collides with object
{
Debug.DrawLine(this.transform.position, _shootTarget, Color.red); //make the ray cast visible in scene view
if (hit.transform.name == _characterCollider.transform.name ) //if the raycast hits the character collider
{
Debug.Log("THE ENEMY SEES YOU");
}
Debug.Log(hit.transform.name);
}
}
}
Я делаю raycast видимым с Debug.Drawline()
и это выглядит такЛуч стреляет от персонажа справа к персонажу слева (с огромным коллайдером).
Однако линия Debug.Log("THE ENEMY SEES YOU");
срабатывает только тогда, когда я действительно очень близко квражеский персонаж, и даже тогда, это происходит в определенных местах и совсем не согласовано.
![Raycast display](https://i.stack.imgur.com/22hIp.png)
Заранее спасибо!