巡逻时敌人消失
Enemy is disappearing when patrolling
我给敌人做了一个代码,它会左右移动并停在窗台上,但由于某种原因,敌人会消失得无影无踪,但敌人仍然可以打你,当我我正在靠近敌人所在的地方
这是我为 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 如果你想看看它是如何使用这段代码的:Link for Bug
因为敌人变换的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);
我给敌人做了一个代码,它会左右移动并停在窗台上,但由于某种原因,敌人会消失得无影无踪,但敌人仍然可以打你,当我我正在靠近敌人所在的地方
这是我为 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 如果你想看看它是如何使用这段代码的:Link for Bug
因为敌人变换的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);