【发布时间】:2019-04-28 05:09:56
【问题描述】:
我正试图找到一种方法让敌人转向玩家。目前它跟随/停止并射击玩家。还没想好怎么让它旋转。如果可以的话请帮忙。我在这里尝试了几种不同的方法,但它们似乎不起作用。
我尝试使用 isFacingRight 创建一个 Flip 函数。
private bool facingRight;
public float speed;
public float stoppingDistance;
public float retreatDistance;
private Animator enemyAnimation;
private bool isDead;
private float direction;
public static bool enemyShoot = false;
private float timeBtwShots;
public float startTimeBtwShots;
public GameObject projectile;
private Transform player;
[SerializeField]
private Stat health;
private void Awake()
{
health.Initialize();
}
// Start is called before the first frame update
void Start()
{
//Player tag
player = GameObject.FindGameObjectWithTag("Player").transform;
enemyAnimation = GetComponent<Animator>();
isDead = false;
}
// Update is called once per frame
void Update()
{
if (Vector2.Distance(transform.position, player.position) > stoppingDistance)
{
transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
timeBtwShots = startTimeBtwShots;
if(player.position.x > transform.position.x && !facingRight) //if the target is to the right of enemy and the enemy is not facing right
Flip();
if(player.position.x < transform.position.x && facingRight)
Flip();
}
else if (Vector2.Distance(transform.position,player.position) <= stoppingDistance && Vector2.Distance(transform.position,player.position)>retreatDistance)
{
transform.position = this.transform.position;
}
else if (Vector2.Distance(transform.position, player.position) > retreatDistance)
{
transform.localScale = new Vector2(-1f, 1f);
transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * Time.deltaTime);
timeBtwShots = 100;
enemyAnimation.SetTrigger("Attack");
}
if (enemyShoot == true)
{
//Stops animation Loop
enemyShoot = false;
enemyAnimation.SetTrigger("Shoot");
}
if (timeBtwShots <= 0)
{
Instantiate(projectile, transform.position, Quaternion.identity);
timeBtwShots = startTimeBtwShots;
}
else
{
timeBtwShots -= Time.deltaTime;
}
if (health.CurrentVal == 0)
{
timeBtwShots = 100;
FindObjectOfType<SoundsScript>().Play("SaibaDeath");
isDead = true;
enemyAnimation.SetBool("Dead", isDead);
Destroy(gameObject, 2f);
}
}
private void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "ProjectileEnem")
{
health.CurrentVal -= 50;
enemyAnimation.SetTrigger("Hurt");
}
}
//Disables enemeies when off screen
private void OnBecameInvisible()
{
GetComponent <Enemy> ().enabled = false;
}
//Re enables enemies once they are visible
private void OnBecameVisible()
{
GetComponent<Enemy>().enabled = true;
}
void Flip(){
Vector3 scale = transform.localScale;
scale.x *= -1;
transform.localScale = scale;
facingRight = !facingRight;
}
}
【问题讨论】:
-
你能添加你试图让他们面对玩家的东西吗?我在您提供的代码中看不到您的翻转功能或
isFacingRight。这也是自上而下的视角还是平台视角(问是因为你说的是旋转,但你也提到了翻转功能和 isFacingRight) -
void Flip(){ Vector3 scale = transform.localScale; scale.x *= -1; transform.localScale = 比例;面对右=!面对右; } 并将其放入 Update if(target.position.x > transform.position.x && !facingRight) //如果目标在敌人的右侧并且敌人没有面向右侧 Flip(); if(target.position.x
-
将其添加到您的问题中。以及用于触发它的任何条件。
-
在更新代码中添加了翻转功能
-
传入一个要翻转的值,例如
float direction为 isRight 设为 1,为 !isRight 设为 -1 而不是不断乘以 -1,这将帮助我们消除任何可能出现的错误.