【问题标题】:Enemy is disappearing when patrolling巡逻时敌人正在消失
【发布时间】:2021-10-10 20:12:34
【问题描述】:

我已经为敌人编写了代码,它会左右移动并停在窗台上,但由于某种原因,敌人会消失得无影无踪,但当我要去的时候,敌人仍然可以击中你靠近敌人所在的位置。

这是我为 Enemy AI 编写的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PatrollingEnemy : MonoBehaviour
{
    public float speed; 
    private bool movingRight = true;
    public Transform groundDetection; //detects the ground if it is there...

    // Update is called once per frame
    void Update()
    {
        transform.Translate(Vector2.right * speed * Time.deltaTime);
        RaycastHit2D groundInfo = Physics2D.Raycast(groundDetection.position, Vector2.down, 2f);

        if (groundInfo.collider == false)
        {
            if(movingRight == true)
            {
                transform.eulerAngles = new Vector2(0, -200);
                movingRight = false;
            }
            else
            {
                transform.eulerAngles = new Vector2(0, 0);
                movingRight = true;
            }
        }
    }
}

如果您想了解它如何使用此代码,请点击以下链接:Link for Bug

【问题讨论】:

    标签: c# unity3d game-development


    【解决方案1】:

    发生这种情况是因为敌人变换的 z 轴 值随时间减小,直到小于 CAMERA z 轴 值并移出相机视图。

    主要问题是当敌人向左移动时设置transform.eulerAngles = new Vector2(0, -200);,当你将此代码与transform.Translate(Vector2.right * speed * Time.deltaTime);结合时,敌人以-200角向其右向量移动,所以经过一段时间,它超出了相机视图(因为相机 z-index 可能默认设置为 -10)。

    需要将y轴值的局部角度设置为180

    ...
    if (groundInfo.collider == false)
    {
        if(movingRight == true)
        {
            transform.eulerAngles = new Vector2(0, 180); // Change -200 to 180
            movingRight = false;
        }
    ...
    }
    ...
    

    另一种方法:如果你想改变敌人的面朝左侧,你可以将localScale.x设置为-1而不是使用旋转。

    这是一个简单的例子:

    // Change face direction to the right when Moving RIGHT
    transform.localScale= new Vector3(transform.localScale.x, transform.localScale.y, transform.localScale.z);
    
    // Change face direction to the left when Moving LEFT
    transform.localScale= new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
    

    【讨论】:

    • 谢谢你帮我解决这个问题:D
    • @WarlockGames 不客气。如果此答案解决了您的问题,您可以标记它以帮助其他可能遇到此问题的人找到正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多