Я все еще новичок в единстве, и мне жаль, если это очень очевидный вопрос.На самом деле, я пытаюсь создать игру, в которой тонкий объект (белая палочка на рисунке ниже) пытается коснуться сферического объекта (оранжевый на рисунке ниже).Красные, зеленые, синие и желтые линии - это радиопередачи, запускаемые с вершины палки в разных направлениях.
Основная цель - нарисовать на сфере черную фигуруиллюстрируя точки пересечения между палкой и сферой.Чтобы лучше понять это, мы видим на следующем изображении сцену с точки зрения вида сверху с тем, как она должна выглядеть, если ручка выполняет свою работу должным образом.
С этой цельюЯ использовал этот код для рисования точки попадания raycast, но он не работает, потому что rend.material.mainTexture
всегда null
, и я не уверен, почему !!
RaycastHit hit_down, hit_right, hit_forward, hit_left;
if (Physics.Raycast(stick.transform.position, stick.transform.TransformDirection(Vector3.down), out hit_down))
{
Debug.DrawRay(stick.transform.position, stick.transform.TransformDirection(Vector3.down) * hit_down.distance, Color.yellow);
Debug.Log("Point of contact down: " + hit_down.point + " on " + hit_down.collider.gameObject.tag);
if (hit_down.collider.gameObject.tag == "sphere")
{
Renderer rend = hit_down.transform.GetComponent<Renderer>();
MeshCollider meshCollider = hit_down.collider as MeshCollider;
Debug.Log(rend.material.mainTexture);
if (rend == null || rend.sharedMaterial == null || meshCollider == null)
return;
Texture2D tex = rend.material.mainTexture as Texture2D;
Vector2 pixelUV = hit_down.textureCoord;
pixelUV.x *= tex.width;
pixelUV.y *= tex.height;
tex.SetPixel((int)pixelUV.x, (int)pixelUV.y, Color.black);
tex.Apply();
}
}
Последний вопрос:правильный способ достижения моей цели?Есть ли другой, более эффективный способ выполнить эту задачу?
Заранее спасибо.