Четверг, 25 Апреля 2024, 01:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » "Призрак" устанавливаемого объекта
"Призрак" устанавливаемого объекта
ZekkinДата: Воскресенье, 20 Марта 2016, 22:34 | Сообщение # 1
частый гость
Сейчас нет на сайте
Добрый день. Делаю установку объектов (строительство) а-ля TD. Объекты устанавливаются, все замечательно, даже "призрак" (прозрачная модель объекта) есть, но... По неведомой мне причине "призрак" героически летит в центр камеры, хотя, по-идее, должен оставаться в точке соприкосновения луча и террейна. Код ниже.

Объявления:
Код

    public UnityEngine.Camera Camera;
    
    public GameObject Home01;
    public GameObject Home01Ghost;
    public GameObject ghost;
    public LayerMask raycastLayers = 1;
    public static int Placing = 0;
    public static int Home = 1;
    private RaycastHit hit;


Код:
Код
private void Update()
    {
  if ((Placing == 1) & (Home == 1)) // Placing - переменная, обозначающая - строю я или нет. Home - ID устанавливаемого объекта.
  {
   if (ghost == null) ghost = Instantiate(Home01Ghost) as GameObject;
   else
   {
   Ray ray = Camera.ScreenPointToRay(Input.mousePosition);
    if (Physics.Raycast(ray, out hit, Mathf.Infinity, raycastLayers))
    {
     Quaternion normana = Quaternion.FromToRotation(Vector3.up, hit.normal);
     ghost.transform.position = hit.point;
     ghost.transform.rotation = normana;
     if (Input.GetMouseButtonDown(0))
     {
      GameObject Roo = Instantiate(Home01, ghost.transform.position, ghost.transform.rotation) as GameObject;
     Placing = 0;
      Destroy(ghost);
      
     }
    }
   }

  }
  }


Возможно, проблема в том что нужно

Код
Ray ray = Camera.ScreenPointToRay(Input.mousePosition);
сменить на
Код
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);


Но в таком случае призрак устанавливается в определенной точке и не следует за мышью. Больше одного не появляется и спамит ошибкой

Код
NullReferenceException: Object reference not set to an instance of an object
GUIz.Update () (at Assets/Script/Interface/GUIz.cs:127)


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


Сообщение отредактировал Zekkin - Воскресенье, 20 Марта 2016, 22:41
LertmindДата: Воскресенье, 20 Марта 2016, 22:59 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
У "призрака" есть Collider? Если да, то возможно он делает Raycast на себя же, нужно либо убрать коллайдер, либо правильно проставить LayerMask. Правильно должно быть Camera.main.ScreenPointToRay(Input.mousePosition); и ты не указал где именно NullReferenceException.

Добавлено (20 марта 2016, 22:56)
---------------------------------------------
И здесь (Placing == 1) & (Home == 1) должно быть (Placing == 1) && (Home == 1).

Добавлено (20 марта 2016, 22:59)
---------------------------------------------
Я не заметил public UnityEngine.Camera Camera;, ты перекрыл класс Camera, тогда всё правильно здесь Camera.ScreenPointToRay(Input.mousePosition);, но других людей введёт в ступор.

ZekkinДата: Понедельник, 21 Марта 2016, 19:57 | Сообщение # 3
частый гость
Сейчас нет на сайте
Действительно, проблема оказалась в коллайдере. Убрал коллайдер в другой слой, все стало нормально. Спасибо =)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » "Призрак" устанавливаемого объекта
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг