c# - 当对象 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 个瓷砖的范围时,瓷砖会改变颜色。当敌人离开时,瓷砖会变回常规颜色。我使用距离而不是碰撞的原因是因为我不能让敌人的物体崩溃并被瓷砖本身卡住。
提前致谢!
解决方案
编辑
我误读FindGameObjectWithTag
为FindGameObjectsWithTag
. 第一个返回单个游戏对象,第二个返回一个游戏对象数组。所以下一段是不正确的。如果会有多个“Breakable_Block”对象,我仍然倾向于使用触发器。如果只有一个“Breakable_Block”,那么 Vector2.Distance 可能更合适。
因此,快速说明GameObject.FindGameObjectWithTag("Breakable_Block")
将返回一个 GameObjects 数组,因此您给出的代码示例将无法找到从您的玩家到整个数组的距离。您需要找到到各个对象的距离。其中涉及更多代码。这就是我认为使用 Unity 中可用的工具可能更容易的原因。
所以,我会这样实现它:
- 将CircleCollider2D添加到您的敌人(对象 B)。将其标记为
Trigger
. - 将BoxCollider2D添加到您的块(假设它们是矩形的)。
- 实施OnTriggerEnter2D和OnTriggerExit2D以更改您的材料属性。
这是一个可以放在敌人(对象 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;
}
}
推荐阅读
- visual-studio-code - 如果以管理员身份打开,为什么 VSCode 无法从资源管理器中打开文件?
- java - 从 Google Cloud Dataflow 内部写入 Firestore
- r - 使用 R 的人总相关性
- python - 使用 setuptools 将 pytests 添加到我的项目中
- javascript - 页面重新加载后如何保持最喜欢/不喜欢的按钮颜色?
- opengl-es - glMapBufferRange 返回 null 并产生一个 GL_INVALID_ENUM?
- r - 在 R 中使用 XGBoost 的模型中变量的影响
- python-3.x - sklearn 的 XGBoost 的“random_state”相当于什么?
- laravel - 上传新照片后如何删除旧照片
- python - Anaconda 错误 - 模块 'brotli' 没有属性 'error'