2013-02-23 4 views
3
var startPoint = 
    shaft.transform.position 
    + shaft.transform.forward; 
var ray = new Ray(
    startPoint, 
    -shaft.transform.forward 
); 

RaycastHit rayCastHit; 
Physics.Raycast(ray, out rayCastHit); 
var textured2D = (Texture2D)discoBall.renderer.material.mainTexture; 
Vector2 textureCoord = rayCastHit.textureCoord; 
Debug.Log(string.Format(
    "{0},{1} at distance {2}", 
    textureCoord.x * textured2D.width, 
    textureCoord.y * textured2D.height, 
    rayCastHit.distance 
)); 

У меня есть шар с объектом внутри объекта «Вал». Я разрабатываю startPoint как расстояние от вала в направлении точек вала (чтобы выйти за пределы сферы). Затем я создаю луч, указывающий назад на сферу с одинаковым расстоянием, так что он сталкивается с внешней средой моей сферы.Почему Unity3D RaycastHit.textureCoord всегда 0,0?

Debug.Log выводит x, y = 0,0 для текстурыCoord и правильное значение 0,35 для расстояния. Почему textureCoord всегда 0,0, когда у меня действительно есть материал с текстурой на моей сфере?

Sphere properties

ответ

5

На самом деле позвольте мне переместить мой комментарий здесь, использует ли сфера сетчатый коллайдер или сфера коллайдера? Если он не использует сетчатый коллайдер, textureCoord returns Vector2.zero.

Update:

Чтобы изменить тип коллайдере GameObject выделите его в редакторе Unity и перейти к Component-> Physics-> MeshCollider. Если появится запрос «Заменить существующий компонент», выберите «Заменить».

GameObjects добавлены из GameObject-> Create_Other меню Unity имеют тенденцию по умолчанию коллайдеров на основе формы объекта (сферы, коробки и т.д.), так как сетка коллайдеров вычислительно дороже.

+0

Добавлен снимок экрана –

+0

@PeterMorris Да, у него есть сфера ** коллайдер **. Попробуйте переключиться на коллайдер ** сетки **. Компонент-> Физика-> MeshCollider, 'Да' для замены. – Jerdak

+0

Если вы добавите это в ответ, а также отметьте, что тип материала должен быть изменен на «Дополнительно», чтобы можно было проверить «Чтение/Запись», и я с радостью его приму. Спасибо за помощь! –

1

ли ширину и высоту Texture2D на самом деле то, что вы ожидаете? Возможно, maintexture - это не правильная текстура на шейдере, который вы используете.

+0

Да, 512x512 и единственная текстура, которую у меня есть на материале –