Я пытаюсь сделать прямую трансляцию, чтобы мой противник не упал с карты и не застрял на стенах. Если он обнаруживает край или стену, он переворачивается и начинает двигаться в другую сторону. Линейная трансляция для обнаружения краев работает очень хорошо, однако линейная трансляция, направленная влево (для обнаружения стен), всегда срабатывает, и я не знаю почему, поэтому враг просто переворачивает каждый кадр.
Мой скрипт:
public class Enemy1 : MonoBehaviour {
Rigidbody2D myBody;
Transform myTransf;
public LayerMask enemyMask;
float myWidth;
public float speed;
// Use this for initialization
void Start () {
myTransf = this.transform;
myBody = this.GetComponent<Rigidbody2D>();
myWidth = this.GetComponent<SpriteRenderer>().bounds.extents.x;
}
// Update is called once per frame
void FixedUpdate () {
// checking if theres any walls or edges, if so, flip
Vector2 lineCastPos = myTransf.position - myTransf.right * myWidth;
Debug.DrawLine(lineCastPos, lineCastPos + Vector2.down);
bool isGrounded = Physics2D.Linecast(lineCastPos, lineCastPos + Vector2.down, enemyMask);
Debug.DrawLine(lineCastPos, lineCastPos - myTransf.right.toVector2() *0.1f);
bool isBlocked = Physics2D.Linecast(lineCastPos, lineCastPos - myTransf.right.toVector2() * 0.1f, enemyMask);
RaycastHit2D hit = Physics2D.Linecast(lineCastPos, lineCastPos - myTransf.right.toVector2());
if (!isGrounded || !isBlocked)
{
Vector3 currRot = myTransf.eulerAngles;
currRot.y += 180;
myTransf.eulerAngles = currRot;
Debug.Log("Ray Hit: " + hit.point);
}
//moving left always
Vector2 myVel = myBody.velocity;
myVel.x = -myTransf.right.x * speed;
myBody.velocity = myVel;
}
}
Примечание: журнал RayCastHit2D дает мне точку 0.0, 0.0 (выделена красной точкой на моем скриншоте), и там ничего нет, только основная камера. введите описание изображения здесь