Enemy movement in javascript?
I currently have a javascript code for a 2D game with an enemy that patrols a platform. Using the width of the sprite, it detects the edge of whatever collider it is on and flips the sprite. I essentially tried to translate a working functional C# script to javascript. The javascript code doesn't flag any errors, but the enemy stays in place and rapidly flips back and forwards. Can anyone tell me what I'm missing?
JavaScript code
#pragma strict
public var speed : float;
public var enemyMask : LayerMask;
private var myBody : Rigidbody2D;
private var myTrans : Transform;
private var myWidth : float;
private var lineCastPos : Vector2;
private var isGrounded : boolean;
private var currRot : Vector3;
function Start () {
myTrans = this.transform;
myBody = this.GetComponent(Rigidbody2D);
myWidth = this.GetComponent(SpriteRenderer).bounds.extents.x;
}
function FixedUpdate () {
lineCastPos = myTrans.position - myTrans.right * myWidth;
isGrounded = Physics2D.Linecast (lineCastPos, lineCastPos + Vector2.down, enemyMask);
if (!isGrounded) {
currRot = myTrans.eulerAngles;
currRot.y += 180;
myTrans.eulerAngles = currRot;
}
var myVel : Vector2 = myBody.velocity;
myVel.x = -myTrans.right.x * speed;
myBody.velocity = myVel;
}
and C# for reference
using UnityEngine;
using System.Collections;
public class Enemytest : MonoBehaviour {
public float speed;
public LayerMask enemyMask;
Rigidbody2D myBody;
Transform myTrans;
float myWidth;
// Use this for initialization
void Start () {
myTrans = this.transform;
myBody = this.GetComponent<Rigidbody2D> ();
myWidth = this.GetComponent<SpriteRenderer> ().bounds.extents.x;
}
// Update is called once per frame
void FixedUpdate () {
Vector2 lineCastPos = myTrans.position - myTrans.right * myWidth;
bool isGrounded = Physics2D.Linecast (lineCastPos, lineCastPos + Vector2.down, enemyMask);
if (!isGrounded) {
Vector3 currRot = myTrans.eulerAngles;
currRot.y += 180;
myTrans.eulerAngles = currRot;
}
Vector2 myVel = myBody.velocity;
myVel.x = -myTrans.right.x * speed;
myBody.velocity = myVel;
}
}
Any help would be greatly appreciated!
Answer by Gamedragon · Apr 24, 2016 at 09:41 PM
Hi,
After a bit of testing it seems that the reason that your enemy is rapidly flipping while staying in place is because you have not assigned the enemy layer mask to the layer that the enemy is a part of. As such the linecast is colliding with the edge of your enemy, and this causes the sprite to flip. There seem to be some other problems with the script but I can't seem to figure out how to fix them, someone else might be able to help you.
I hope this helps.
Your answer
![](https://koobas.hobune.stream/wayback/20220612075511im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
enemy patrolling using javascript??? 0 Answers
2D Enemy patrol using javascript 1 Answer
How I make an npc move when I get near it? 0 Answers
Enemy AI ignores the distance from the player 0 Answers
Enemy AI. How to make the AI chase the player by using the exact same moves as the player. (2D) 1 Answer