Error cs0119 gameobject is a type which is not valid in the given context

Здравствуйте. Продолжая тернистый путь освоения UI, я написал скрипт, который должен открывать UI окно по клику на GameObject.

UI, GameObject и контекст.

Здравствуйте. Продолжая тернистый путь освоения UI, я написал скрипт, который должен открывать UI окно по клику на GameObject.

Используется csharp

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

public class Province : MonoBehaviour {

    GameObject canvas_info = GameObject;

    void OnMouseOver()
    {
        if (Input.GetMouseButtonUp(0))
            canvas_info.SetActive(true);
    }
}

Скрипт должен висеть на объекте.
Выдает ошибку:
Error CS0119 ‘GameObject’ is a type, which is not valid in the given context

В чем проблема и как реализовать то, что я хочу?

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: UI, GameObject и контекст.

Сообщение sxweb 23 апр 2016, 21:25

Используется csharp

void OnMouseDown()
    {
        transform.GetChild(0).GetChild(0).gameObject.SetActive(true);
    }

Аватара пользователя
sxweb
UNIт
 
Сообщения: 60
Зарегистрирован: 12 июл 2015, 09:33
Откуда: Москва
Skype: yuranthere
  • Сайт

Re: UI, GameObject и контекст.

Сообщение Rpabuj1 23 апр 2016, 21:32

sxweb писал(а):

Используется csharp

void OnMouseDown()
    {
        transform.GetChild(0).GetChild(0).gameObject.SetActive(true);
    }

Ошибкой компилятор считает это:

Используется csharp

GameObject canvas_info = GameObject;

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: UI, GameObject и контекст.

Сообщение Ceetrus 23 апр 2016, 21:45

нужно GameObject canvas_info = gameObject;

Ceetrus
UNец
 
Сообщения: 40
Зарегистрирован: 16 фев 2015, 23:13

Re: UI, GameObject и контекст.

Сообщение sxweb 23 апр 2016, 21:49

Ceetrus писал(а):нужно GameObject canvas_info = gameObject;

Таким образом он получит ссылку на объект по которому кликает, а не на канвас. Если панель является дочерним к канвасу, а сам канвас к объекту по которому кликаете, то напишите как я указал, убрав ообще объявление переменной canvas_info

Аватара пользователя
sxweb
UNIт
 
Сообщения: 60
Зарегистрирован: 12 июл 2015, 09:33
Откуда: Москва
Skype: yuranthere
  • Сайт

Re: UI, GameObject и контекст.

Сообщение Rpabuj1 23 апр 2016, 21:51

sxweb писал(а):

Ceetrus писал(а):нужно GameObject canvas_info = gameObject;

Таким образом он получит ссылку на объект по которому кликает, а не на канвас. Если панель является дочерним к канвасу, а сам канвас к объекту по которому кликаете, то напишите как я указал, убрав ообще объявление переменной canvas_info

Канвас отдельно, объект отдельно, а окно — дочернее канваса

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: UI, GameObject и контекст.

Сообщение sxweb 23 апр 2016, 21:55

Rpabuj1 писал(а):

sxweb писал(а):

Ceetrus писал(а):нужно GameObject canvas_info = gameObject;

Таким образом он получит ссылку на объект по которому кликает, а не на канвас. Если панель является дочерним к канвасу, а сам канвас к объекту по которому кликаете, то напишите как я указал, убрав ообще объявление переменной canvas_info

Канвас отдельно, объект отдельно, а окно — дочернее канваса

Тогда я сделал бы либо перетаскиванием в инспектор, либо, если это к примеру префаб и такой возможности нет, то GameObject.FindGameObjectWithTag<>();

Аватара пользователя
sxweb
UNIт
 
Сообщения: 60
Зарегистрирован: 12 июл 2015, 09:33
Откуда: Москва
Skype: yuranthere
  • Сайт

Re: UI, GameObject и контекст.

Сообщение Rpabuj1 23 апр 2016, 21:56

sxweb писал(а):

Rpabuj1 писал(а):

sxweb писал(а):

Ceetrus писал(а):нужно GameObject canvas_info = gameObject;

Таким образом он получит ссылку на объект по которому кликает, а не на канвас. Если панель является дочерним к канвасу, а сам канвас к объекту по которому кликаете, то напишите как я указал, убрав ообще объявление переменной canvas_info

Канвас отдельно, объект отдельно, а окно — дочернее канваса

Тогда я сделал бы либо перетаскиванием в инспектор, либо, если это к примеру префаб и такой возможности нет, то GameObject.FindGameObjectWithTag<>();

Перетаскиванием? Можно подробнее? Просто вчера только узнал про UI

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: UI, GameObject и контекст.

Сообщение sxweb 23 апр 2016, 22:03

Используется csharp

public GameObject canvas_info;

у объекта в инспекторе появится поле, в которое можно перетащить компонент.

Аватара пользователя
sxweb
UNIт
 
Сообщения: 60
Зарегистрирован: 12 июл 2015, 09:33
Откуда: Москва
Skype: yuranthere
  • Сайт

Re: UI, GameObject и контекст.

Сообщение Rpabuj1 23 апр 2016, 22:05

sxweb писал(а):

Используется csharp

public GameObject canvas_info;

у объекта в инспекторе появится поле, в которое можно перетащить компонент.

А перетаскивать что? Канвас? Image?

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: UI, GameObject и контекст.

Сообщение sxweb 23 апр 2016, 22:07

то, чему нужно SetActive установить.

Аватара пользователя
sxweb
UNIт
 
Сообщения: 60
Зарегистрирован: 12 июл 2015, 09:33
Откуда: Москва
Skype: yuranthere
  • Сайт

Re: UI, GameObject и контекст.

Сообщение Rpabuj1 23 апр 2016, 22:09

sxweb писал(а):то, чему нужно SetActive установить.

Я просто хочу отобразить окно по клику на gamеobject. Про SetActive мне друг подсказал… что конкретно надо делать, чтобы отобразить окно?

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: UI, GameObject и контекст.

Сообщение sxweb 23 апр 2016, 22:15

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

Аватара пользователя
sxweb
UNIт
 
Сообщения: 60
Зарегистрирован: 12 июл 2015, 09:33
Откуда: Москва
Skype: yuranthere
  • Сайт

Re: UI, GameObject и контекст.

Сообщение Rpabuj1 23 апр 2016, 22:16

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

Это понятно все и просто)

НО: к чему это в этом скрипте?

Я задал этот вопрос пользователю Croc.
Вот что он ответил:

Используется csharp

void OnMouseOver()
{
 if (Input.GetMouseUp(0))
  canvas_info.SetActive(true);
}
 

Где canvas_info — ссылка на канвас «окна»

Как это понимать?

Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: UI, GameObject и контекст.

Сообщение Cr0c 23 апр 2016, 22:24

Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 24



Upon becoming familiar with C#, I’m getting the following error when unit testing on the line where an assertion is made Assert.IsInstanceTypeOf.

Error CS0119 'Product' is a type, which is not valid in the given context

The matter of creating a type has been performed. What is causing this error to be raised?

UnitTest1.cs

using Microsoft.VisualStudio.TestTools.UnitTesting;
using ProductNamespace;

namespace TestProject2
{
    [TestClass]
    public class TestProduct
    {
        [TestMethod]
        public void TestNewProduct()
        {
            Product mock_product = new Product(4.95);
            Assert.IsInstanceOfType(mock_product, Product);
        }
    }
}

Product.cs

namespace ProductNamespace
{
    public class Product
    {
        private double price;

        public Product(double price)
        {
            this.price = price;
        }
    }
}

Hamza Khanzada's user avatar

asked Sep 2, 2021 at 5:57

binny's user avatar

3

It looks like you’re trying to use the IsInstanceOfType(object, Type) method. To do that, you need to provide a Type argument, but currently you’ve just specified the class name directly. That’s not a valid C# expression — you need to use the typeof operator to obtain a Type from the class name:

Assert.IsInstanceOfType(mock_product, typeof(Product));

Note that this really isn’t a useful test — you’re not testing anything about the code, you’re essentially asking whether .NET is behaving normally. If the code reaches that line (i.e. if the constructor doesn’t throw an exception) then it’s bound to pass — because the result of new Xyz is always an Xyz. (There’s a slight edge case around COM interfaces, but it’s not relevant here.)

answered Sep 2, 2021 at 5:59

Jon Skeet's user avatar

Jon SkeetJon Skeet

1.4m851 gold badges9045 silver badges9133 bronze badges

Assert.IsInstanceOfType(mock_product, typeof(Product));

Please try the above. As per official documentation, the second parameter should be of Type.

answered Sep 2, 2021 at 6:02

SRIDHARAN's user avatar

SRIDHARANSRIDHARAN

1,1331 gold badge15 silver badges34 bronze badges

0

Permalink

Cannot retrieve contributors at this time

description title ms.date f1_keywords helpviewer_keywords ms.assetid

Compiler Error CS0119

Compiler Error CS0119

07/20/2015

CS0119

CS0119

048924f1-378f-4021-bd20-299d3218f810

Compiler Error CS0119

‘construct1_name’ is a ‘construct1’, which is not valid in the given context.

The compiler detected an unexpected construct such as the following:

  • A class constructor is not a valid test expression in a conditional statement.

  • A class name was used instead of an instance name to refer to an array element.

  • A method identifier is used as if it were a struct or class

Example

The following sample generates CS0119: ‘C.B()’ is a method, which is not valid in the given context. You can fix this error by changing the name of the method C.B, or using the fully qualified name for the class B like N2.B.

namespace N2
{
    public static class B
    {
        public static void X() {}
    }
}

namespace N1
{
    public class C
    {
        void B() {}
        void M() => B.X();   // CS0119
    }
}

Сделал вращение,но оно почему-то выдаёт ошибку

Assets/Scripts/moving.cs(22,24): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected

вот код

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

public class moving : MonoBehaviour {
	public GameObject obj;
	private float speed = 5f,rotSpeed = 2f;
	private Rigidbody2D rb;
	private SpriteRenderer spr;
	float rotation;

	private void Awake(){
		rb = GetComponent  ();
		spr = GetComponent  ();
	}

	private void Run(){
		rotation = rotSpeed * Input.GetAxis("Horizontal");
		if (Input.GetAxis ("Horizontal") == 1f || Input.GetAxis("Horizontal") == -1f) {
			rotation =+ rotSpeed;
		}
		transform.rotation = Quaternion (new Vector3 (transform.rotation, transform.rotation, rotation));
		Vector3 direction = transform.up * Input.GetAxis ("Vertical");
		transform.position = Vector3.MoveTowards (transform.position, transform.position + direction,speed * Time.deltaTime);
	}

	private void Update () {
		Run ();
	}
}


  • Вопрос задан

    более трёх лет назад

  • 1769 просмотров

А теперь по делу.
transform.rotation = Quaternion (new Vector3 (transform.rotation, transform.rotation, rotation));
Вы СОЗДАЕТЕ объект типа Quaternion , а при создании объектов используется new (выделение памяти и тд и тп).
тоесть должно бы быть
transform.rotation = new Quaternion (new Vector3 (transform.rotation, transform.rotation, rotation));

Если же все таки вы используете не новый созданный объект, а хотите просто метод над кватернионом , то было бы
Quaternion.НужныйМетод(параметры метода). а в вашем случае вы использовать пробуете конструктор объекта (параметры для него) без выделения как такового объета

Многовато повторений и так уже, но повторюсь — вам бы какой нибудь курс «Основы программирования» в обязательном порядке

Пригласить эксперта


  • Показать ещё
    Загружается…

09 февр. 2023, в 15:56

20000 руб./за проект

09 февр. 2023, в 15:55

75000 руб./за проект

09 февр. 2023, в 15:13

2000 руб./за проект

Минуточку внимания

Понравилась статья? Поделить с друзьями:
  • Error cs0117 time does not contain a definition for deltatime
  • Error cs0117 random does not contain a definition for range
  • Error cs0117 physics2d does not contain a definition for overlapcircleall
  • Error cs0117 input does not contain a definition for getaxis
  • Error cs0117 input does not contain a definition for get key