Я пытаюсь сделать лайнкаст, чтобы мой противник не упал с карты и не застрял на стенах, если он обнаруживает край или стену, он переворачивается и начинает двигаться в другую сторону. Линейная трансляция для обнаружения краев работает нормально, однако линейная трансляция, направленная влево (для обнаружения стен), всегда срабатывает, и я не знаю почему, поэтому противник просто продолжает переворачивать каждый кадр.
Мой сценарий:
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 (выделено красной точкой на моем скриншоте), и там ничего не сидит, только основная камера.
Я перешел на &&, и проблема все еще сохраняется, в любом случае спасибо за ввод ^^





Извините, если проблема не в этом, но этот
if (!isGrounded || !isBlocked)мне кажется подозрительным: вы имеете в видуif (!isGrounded && !isBlocked)?