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;
}
}
}
asked Sep 2, 2021 at 5:57
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 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
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 руб./за проект