Color
не является компонентом, поэтому вы должны получить компонент Renderer
и посмотреть цвет его материала.Кроме того, вы забыли ()
в конце вызова метода GetComponentInChildren<...>()
.
Кроме того, преобразуйте цвета в Vector4
, чтобы он сравнивал значения компонентов цвета.
Как предположил Эвертс, вы захотите дать каждому дочернему объекту коллайдер, если вы хотите проверить цвет именно того ребенка, с которым вы столкнулись.Так что просто используйте GetComponent
, а не GetComponentInChildren
.
Кроме того, вы должны вызывать GetComponent
как можно меньше раз и помнить результат, где это возможно, потому что это дорогостоящая операция:
private Renderer playerRenderer;
void Start()
{
playerRenderer = player.GetComponent<Renderer>();
}
void OnCollisionEnter(Collision collision)
{
Renderer collidedRenderer = collision.gameObject.GetComponent<Renderer>();
if (collidedRenderer != null &&
(Vector4)collidedRenderer.material.color ==
(Vector4)playerRenderer.material.color
)
{
Debug.Log("saya warna sama");
}
}
Ваше пояснение выше означает, что вам не нужно этого делать, но я собираюсь оставить это здесь, потому что это может быть полезно для других людей ...
Если ваши цвета определены случайным образом так, что вам следует ждать только «достаточно близкого» цвета, сравните квадратное расстояние с «достаточно близким» расстоянием.
private Renderer playerRenderer;
private float closeColorSquareDistance = 0.01f;
void Start()
{
playerRenderer = player.GetComponent<Renderer>();
}
void OnCollisionEnter(Collision collision)
{
Renderer collidedRenderer = collision.gameObject.GetComponent<Renderer>();
if (collidedRenderer != null &&
( (Vector4)collidedRenderer.material.color
- (Vector4)playerRenderer.material.color
).sqrMagnitude < closeColorSquareDistance
)
{
Debug.Log("saya warna sama");
}
}
Вам нужно будет найтизначение closeColorSquareDistance
, которое делает сравнение для вас.Уменьшите closeColorSquareDistance
, чтобы сделать сравнение более строгим, и увеличьте его, чтобы сделать сравнение более мягким.