簡體   English   中英

Unity 2D旋轉AI敵人看玩家

[英]Unity 2D rotate the AI enemy to look at player

我正在制作一個左右兩側的 2D 游戲,因此玩家只能向左或向右移動或跳躍。 我制造了一個 AI 作為敵人。 人工智能工作正常。 他可以去找玩家殺死他。

問題是敵人在殺死他時無法旋轉或面對玩家。 我想讓 AI 看着玩家。 當玩家在敵人的左邊時,敵人應該向左旋轉看玩家。 我搜索了很多網站,但沒有得到任何正確的解決方案。 這是我的敵人腳本:

public class enemy : MonoBehaviour
{
    public float speed;
    private Animator animvar;
    private Transform target;
    public GameObject effect;
    public float distance;
    private bool movingRight = true;
    public Transform groundedDetection;
    public float moveInput;
    public bool facingRight = true;

    void Start()
    {
        animvar = GetComponent<Animator>();
        target = GameObject.FindGameObjectWithTag("Player").transform;
    }

    // Update is called once per frame
    void Update()
    {
        if (Vector3.Distance(target.position, transform.position) < 20)
        {
            transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
        }
        else
        {
            transform.Translate(Vector2.right * speed * Time.deltaTime);
        }
        RaycastHit2D groundInfo = Physics2D.Raycast(groundedDetection.position, Vector2.down, distance);
    }

    void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.tag.Equals("danger"))
        {
            Instantiate(effect, transform.position, Quaternion.identity);
            Destroy(gameObject);
        }
        if (col.gameObject.tag.Equals("Player"))
        {
            Instantiate(effect, transform.position, Quaternion.identity);
            Destroy(gameObject);
        }
    }
}

游戲是 2D,左,右,使用 Unity3D 跳躍。

你需要一個函數來翻轉你的精靈,你可以通過改變變換的比例來做到這一點,並保持一個布爾值來檢查它面對的位置bool facingRight; ,所以像這樣

void Flip(){
      Vector3 scale = transform.localScale;
      scale.x *= -1;
      transform.localScale = scale;
      facingRight = !facingRight;
}

並在您的Update檢查是否需要翻轉

if (Vector3.Distance(target.position,transform.position)<20)
    {

     transform.position=Vector2.MoveTowards(transform.position, target.position,speed*Time.deltaTime);
     if(target.position.x > transform.position.x && !facingRight) //if the target is to the right of enemy and the enemy is not facing right
        Flip();
     if(target.position.x < transform.position.x && facingRight)
        Flip();
   }

它很簡單,只需獲取 Player x 位置並與 Enemy 的 x 位置進行比較,然后相應地翻轉敵人的精靈

這是我的 Enemy 腳本中的 Update() 方法。 這將處理敵人的移動和改變精靈面對的方向:

if (moveRight )
        {
            transform.Translate(2 * Time.deltaTime * moveSpeed, 0, 0);
            transform.localScale = new Vector2(6, 6); //6,6 is just a size that suits my sprite
            
        }

        else if (!moveRight)
        {
            transform.Translate(-2 * Time.deltaTime * moveSpeed, 0, 0);
            transform.localScale = new Vector2(-6, 6);
            
        }

這是我的敵人 Attack() 方法,我將玩家 X 位置與敵人 X 位置進行比較。 如果玩家 X 較少(在敵人的左側),我將敵人的精靈翻轉為負

            if (transform.position.x > Player.position.x)
            {
                transform.localScale = new Vector2(-6, 6);
            }
            else if (transform.position.x < Player.position.x)
            {
                transform.localScale = new Vector2(6, 6);
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM