Скрипт для инвенторя

Программирование на Юнити.

Скрипт для инвенторя

Сообщение KILo07 08 дек 2018, 21:59

Здравствуйте, уважаемые форумчане. В unity я новичок. Подскажите пожалуйста, как решить ошибку с ScreenPointToRay(подчеркнута красным!)? Вот что выдает: "Inventory.cs(30,35): error CS1061: Type `object' does not contain a definition for `ScreenPointToRay' and no extension method `ScreenPointToRay' of type `object' could be found. Are you missing an assembly reference?" Код прилагается.За ранее благодарю.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Inventory : MonoBehaviour {
List<Item> item;
public GameObject cellContainer;
public KeyCode showInventory;
public KeyCode takeButton;
// Use this for initialization
void Start () {

item = new List<Item>();

cellContainer.SetActive(false);

for (int i = 0; i < cellContainer.transform.childCount; i++)
{
item.Add(new Item());
}
}

// Update is called once per frame
void Update ()
{
ToggleInventory();
if (Input.GetKeyDown(takeButton))
{
Ray ray = Camera.main.ScreenPointToRay(new Vector2(Screen.width / 2, Screen.height / 2));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 2f))
{
if (hit.collider.GetComponent<Item>())
{
for (int i = 0; i < item.Count; i++ )
{
if (item[i].id==0)
{
item[i] = hit.collider.GetComponent<Item>();
DisplayItems();
Destroy(hit.collider.GetComponent<Item>().gameObject);
break;
}
}
}
}
}

}

void ToggleInventory()
{
if (Input.GetKeyDown(showInventory))
{
if (cellContainer.activeSelf)
{
cellContainer.SetActive(false);
}

else
{
cellContainer.SetActive(true);
}
}
}

void DisplayItems()
{
for(int i = 0; i < item.Count; i++)
{
Transform cell = cellContainer.transform.GetChild(i);
Transform icon = cell.GetChild(0);
Image img = icon.GetComponent<Image>();
if (item[i].id != 0)
{
img.enabled = true;
img.sprite = Resources.Load<Sprite>(item[i].pathIcon);
}
else
{
img.enabled = false;
img.sprite = null;
}
}
}
}
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49

Re: Скрипт для инвенторя

Сообщение Ziza 08 дек 2018, 22:33

Скорее всего у камеры не выставлен тег "MainCamera", проверьте
Аватара пользователя
Ziza
UNец
 
Сообщения: 38
Зарегистрирован: 02 ноя 2018, 23:07

Re: Скрипт для инвенторя

Сообщение KILo07 08 дек 2018, 23:00

Нууу фактически камеры у меня нету. Она вшита в стандартный FPSController. Вот фото с Unity.
https://cdn1.savepice.ru/uploads/2018/1 ... 6-full.png
https://cdn1.savepice.ru/uploads/2018/1 ... 7-full.png
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49

Re: Скрипт для инвенторя

Сообщение Ziza 08 дек 2018, 23:19

http://prntscr.com/lsgo6q
Вот здесь переключите на MainCamera
Аватара пользователя
Ziza
UNец
 
Сообщения: 38
Зарегистрирован: 02 ноя 2018, 23:07

Re: Скрипт для инвенторя

Сообщение KILo07 08 дек 2018, 23:43

Переключал- не помогло.Перезагружал проект и ни чего.Все как и было(когда навожу в MVStudio на ScreenPointToRay, показывает такое сообщение в фото
https://prnt.sc/lsgygv
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49

Re: Скрипт для инвенторя

Сообщение KILo07 08 дек 2018, 23:48

Может быть такое, что в скрипте FirstPersonController камера как то заблокирована и ее нельзя менять другим скриптом, ну или что то такое?
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49

Re: Скрипт для инвенторя

Сообщение Ziza 08 дек 2018, 23:50

А замените эту строчку на:
Синтаксис:
Используется csharp
var camera = FindObjectOfType<Camera>();
Ray ray = camera.ScreenPointToRay(new Vector2(Screen.width / 2, Screen.height / 2));
print("Finded camera: " + camera.name+ " " + camera.tag);

Заработает? И что в консоль юнити выведет?
Аватара пользователя
Ziza
UNец
 
Сообщения: 38
Зарегистрирован: 02 ноя 2018, 23:07

Re: Скрипт для инвенторя

Сообщение KILo07 08 дек 2018, 23:56

Не помогло :( ScreenPointToRay так же подчеркнут. только теперь при наведении пишет не object а camera.а в консоле вот: Type `Camera' does not contain a definition for `ScreenPointToRay' and no extension method `ScreenPointToRay' of type `Camera' could be found. Are you missing an assembly reference?
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49

Re: Скрипт для инвенторя

Сообщение 1max1 08 дек 2018, 23:57

Мистика...
А если так:
Синтаксис:
Используется csharp
var v = new Vector3(Screen.width / 2, Screen.height / 2);
Ray ray = Camera.main.ScreenPointToRay(v);
 
Аватара пользователя
1max1
Адепт
 
Сообщения: 1616
Зарегистрирован: 28 июн 2017, 10:51

Re: Скрипт для инвенторя

Сообщение KILo07 09 дек 2018, 00:03

ни как не хочет работать(( ScreenPointToRay все так же((может его нужно подключить как то, или я хз уже(((
https://prnt.sc/lsh6f7
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49

Re: Скрипт для инвенторя

Сообщение KILo07 09 дек 2018, 00:05

главное все делал по видеоуроку!у него работает у меня хрен
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49

Re: Скрипт для инвенторя

Сообщение Ziza 09 дек 2018, 00:06

Чет такое ощущение, что в проекте есть скрипт с именем Camera)
Аватара пользователя
Ziza
UNец
 
Сообщения: 38
Зарегистрирован: 02 ноя 2018, 23:07

Re: Скрипт для инвенторя

Сообщение KILo07 09 дек 2018, 00:18

Алилуя)))ваша правда)был скрипт под камеру)но под левым названием)я так понял из него что то использовалось и не давало этому скрипту норм работать)
спасибо большое за помощь)без вас неделю бы разбирался)
KILo07
UNец
 
Сообщения: 9
Зарегистрирован: 08 дек 2018, 21:49


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Mari4og и гости: 6