首页 > 解决方案 > 当对象 A 在范围内时如何更改对象的 B 颜色?二维

问题描述

我有一个敌方 AI 对象,它随机巡逻自上而下的 2d 迷宫(对象 B),在这个迷宫中是瓷砖(A 的多个对象)。我很难找到一种方法来改变距离敌人 B 很近的只有 1 个瓷砖的颜色。这是我的代码:

公共变换块;

 private void Update()
 {
     blocks = GameObject.FindGameObjectWithTag("Breakable_Block").transform;

     if (Vector2.Distance(transform.position, blocks.position) < 10)
     {
         blocks.GetComponent<Renderer>().material.color = Color.green;
     }


 }

我试图用我的项目做的是让一个看不见的敌人在迷宫中随机巡逻,当它接触到或 1 个瓷砖的范围时,瓷砖会改变颜色。当敌人离开时,瓷砖会变回常规颜色。我使用距离而不是碰撞的原因是因为我不能让敌人的物体崩溃并被瓷砖本身卡住。

敌人是天蓝色的,瓷砖是紫色的。

提前致谢!

标签: c#unity3ddistanceobject-detection

解决方案


编辑 我误读FindGameObjectWithTagFindGameObjectsWithTag. 第一个返回单个游戏对象,第二个返回一个游戏对象数组。所以下一段是不正确的。如果会有多个“Breakable_Block”对象,我仍然倾向于使用触发器。如果只有一个“Breakable_Block”,那么 Vector2.Distance 可能更合适。

因此,快速说明GameObject.FindGameObjectWithTag("Breakable_Block")将返回一个 GameObjects 数组,因此您给出的代码示例将无法找到从您的玩家到整个数组的距离。您需要找到到各个对象的距离。其中涉及更多代码。这就是我认为使用 Unity 中可用的工具可能更容易的原因。

所以,我会这样实现它:

这是一个可以放在敌人(对象 B)上的快速代码示例。

public class Enemy : MonoBehaviour
{
  void OnTriggerEnter2D ( Collider2D other )
  {
    other.GetComponent<Renderer>().material.color = Color.green;
  }

  void OnTriggerExit2D ( Collider2D other )
  {
    other.GetComponent<Renderer>().material.color = Color.red;
  }
}

推荐阅读