2015-02-12 4 views
0

У меня есть объект с диффузным шейдером и во время выполнения. Я хочу, чтобы шейдер переключился на Diffuse Always Visible, но это должно срабатывать только в том случае, если устройство находится за определенным объектом внутри слоя с препятствиями.Обновление Shader во время выполнения в Unity

Сначала я попытался переключить объектный шейдер с помощью следующего кода, и шейдер изменился в инспекторе, но не во время игры. Я попытался разместить и вызвать шейдер из ресурсов, а также создать отдельные материалы, но он не работает.

Вот код, я использую в C#

Unit.renderer.material.shader = Shader.Find("Diffuse - Always visible"); 

Что касается остального, я думал использования raycast, но не уверен, как справиться с этим.

Заранее спасибо

+0

Проблема, исправленная с помощью шейдера, в котором объекты субъектов также должны быть нацелены на код: P Мне нужна только другая концепция, где шейдер изменяется, если устройство находится за объектом! – Jason

+0

Вы можете рассмотреть ссылку на шейдер из папки «Ресурсы»? – Zze

ответ

0

мне нужно только другая концепция, где сейчас изменения шейдерных если блок находится позади объекта!

Для триггера, как обращаться с ним, во многом зависит от того, как движется ваша камера.

Чтобы проверить 3D-игру, raycasts должен работать. Так или нет что-то «за» что-то еще зависит от точки зрения камеры, я бы лично попробовать что-то вроде этого, чтобы начать:

  1. Используйте Camera.WorldToScreenPoint, чтобы выяснить, где ваш объект находится на экране.
  2. Используйте Camera.ScreenPointToRay, чтобы преобразовать это в луч, который вы отправите через физический движок.
  3. Используйте Physics.Raycast и проверьте, что попало. Если он не попал в объект, о котором идет речь, перед ним что-то стоит.

В зависимости от ваших целей, вы можете проверить разные моменты. Если вы просто проверяете, что что-то более, чем на полпути, покрыто объектом, возможно, достаточно одного расиста в его центре. Если вы хотите увидеть, если он вообще закрыт, вы можете попробовать что-то вроде поиска четырех приблизительных углов объекта и рейкирования против них.

Если это 2D игра или камера всегда под фиксированным углом (например, в боковой скроллер), проблема потенциально намного проще. Добавьте коллайды к объектам и используйте OnTriggerEnter или OnTriggerEnter2D (вместе с соответствующими функциями выхода). Это работает только в том случае, если крошечный бит перекрытия должен вызвать эффект, и он работает только в том случае, если глубина не соответствует действительности (например, в 2D-игре), поэтому ваши коллайдеры будут фактически пересекаться.

 Смежные вопросы

  • Нет связанных вопросов^_^