Nano Hash - криптовалюты, майнинг, программирование

как вывести 3d мир на экран (unity3d)

В моем методе съемки я получаю raycast точно посередине экрана, работает нормально, но теперь для более подходящего я хочу изменить его в мире на экран (а также между перекрестием, а не с середины экрана). но я не получил никакого направления. Заранее спасибо за помощь. ниже мой код для экрана в мире.

public void  Shoot ()
{
    //bullet_target
    var layerMask = (1 << 8);
    layerMask = ~layerMask;
    Vector3 bullet_target = Vector3.zero;
    Ray ray = Camera.main.ScreenPointToRay( new Vector3(screen_width_mid, screen_height_mid, 0) );
    RaycastHit hit;
    GameObject hit_game_object;
    Transform hit_transform;
    if (Physics.Raycast (ray.origin, ray.direction * 1000 ,out hit, 1500.0f , layerMask) ) 
        {
            bullet_target = hit.point;
            hit_game_object = hit.transform.gameObject;
            hit_transform = hit.transform;
        }else
        {
            hit_game_object = null; 
        }
        if(hit_game_object!=null)
            {               
                if( hit_game_object.tag=="head" )
                    {
                        //blah blah do any stuf
                    }
            }
        }
}
02.06.2017

  • Мир на экране? Как это сработает? 02.06.2017
  • Камера.WorldToScreenPoint 02.06.2017
  • Можете ли вы объяснить, как ваша съемка будет работать с этим? Вы хотите снимать из мира на экран? В чем смысл? 02.06.2017
  • Я хочу, в какую точку перекрестия смотрит середина мира, и чтобы получить эту точку, а затем сделать что-то на ней... для большей точности 02.06.2017
  • На самом деле, делая игру со стрельбой из лука, для этой цели нужна точная точка попадания в raycast и делать что-то еще. 02.06.2017
  • Хорошо, подожди секунду 02.06.2017

Ответы:


1

Если вы хотите получить положение объекта в пространстве экрана, просто используйте Camera.WorldToScreenPoint();

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

https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html

Transform crosshair;

Vector3 GetCrosshairScreenPos()
{
    if(crosshair)
    {
        Vector3 worldPos = crosshair.position;
        Vector3 screenPos = Camera.main.WorldToScreenPoint(crosshair.position);
        return screenPos;
    }
}
02.06.2017
  • Vector3 worldPos = crosshair.position; Vector3 screenPos = Camera.main.WorldToScreenPoint(worldpos); var layerMask = (1 ‹‹ 8); Маска слоя = ~Маска слоя; Vector3 bullet_target = Vector3.zero; Ray ray = Camera.main.ScreenPointToRay(screenpos); хит RaycastHit; Игровой объект hit_game_object; 02.06.2017
  • Vector3 screenPos = Camera.main.WorldToScreenPoint(worldpos); должен быть Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos); и Camera.main.ScreenPointToRay(screenpos); должно быть Camera.main.ScreenPointToRay(screenPos); 02.06.2017
  • Опечатка.. это не проблема.. она дает некоторые -1360, -262,-430.. позиции.. которые неверны 02.06.2017
  • Его позиция на стороне игрока 02.06.2017
  • довольно поздно принять ответ, но большое спасибо. идеальное решение :-) 07.06.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..