当对象 A 在范围内时如何更改对象 B 的颜色?二维
how to change object's B color when object A is in range? 2D
我有一个敌方 AI 对象随机巡逻一个自上而下的二维迷宫(对象 B),并且在这个迷宫内是瓷砖(A 的多个对象)。我无法想出一种方法来更改距离敌人对象 B 很近的 1 个图块的颜色。这是我的代码:
public 变换方块;
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 个瓷砖时,瓷砖会改变颜色。当敌人离开时,瓷砖会变回常规 color.The 我使用距离而不是碰撞的原因是因为我不能让敌人的物体崩溃并被瓷砖本身卡住。
提前致谢!
编辑
我把 FindGameObjectWithTag
误读成了 FindGameObjectsWithTag
。第一个 return 是单个游戏对象,第二个 return 是一个游戏对象数组。所以下一段是不正确的。如果要有多个 "Breakable_Block" 对象,我仍然倾向于使用触发器。如果只有一个 "Breakable_Block",那么 Vector2.Distance 可能更合适。
所以,快速说明一下,GameObject.FindGameObjectWithTag("Breakable_Block")
将 return 一个游戏对象数组,因此您给出的代码示例将无法找到与你的球员到整个阵列。您需要找到到各个对象的距离。其中涉及更多代码。这就是我认为使用 Unity 中提供的工具可能更简单的原因。
所以,我会这样实现它:
- 给你的敌人(对象 B)添加一个 CircleCollider2D。将其标记为
Trigger
.
- 将 BoxCollider2D 添加到您的块中(假设它们是
矩形 ).
- 实施 OnTriggerEnter2D, and OnTriggerExit2D 改变
您的 material 属性。
这是您可以放置在敌人(对象 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;
}
}
我有一个敌方 AI 对象随机巡逻一个自上而下的二维迷宫(对象 B),并且在这个迷宫内是瓷砖(A 的多个对象)。我无法想出一种方法来更改距离敌人对象 B 很近的 1 个图块的颜色。这是我的代码:
public 变换方块;
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 个瓷砖时,瓷砖会改变颜色。当敌人离开时,瓷砖会变回常规 color.The 我使用距离而不是碰撞的原因是因为我不能让敌人的物体崩溃并被瓷砖本身卡住。
提前致谢!
编辑
我把 FindGameObjectWithTag
误读成了 FindGameObjectsWithTag
。第一个 return 是单个游戏对象,第二个 return 是一个游戏对象数组。所以下一段是不正确的。如果要有多个 "Breakable_Block" 对象,我仍然倾向于使用触发器。如果只有一个 "Breakable_Block",那么 Vector2.Distance 可能更合适。
所以,快速说明一下,GameObject.FindGameObjectWithTag("Breakable_Block")
将 return 一个游戏对象数组,因此您给出的代码示例将无法找到与你的球员到整个阵列。您需要找到到各个对象的距离。其中涉及更多代码。这就是我认为使用 Unity 中提供的工具可能更简单的原因。
所以,我会这样实现它:
- 给你的敌人(对象 B)添加一个 CircleCollider2D。将其标记为
Trigger
. - 将 BoxCollider2D 添加到您的块中(假设它们是 矩形 ).
- 实施 OnTriggerEnter2D, and OnTriggerExit2D 改变 您的 material 属性。
这是您可以放置在敌人(对象 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;
}
}