Доступ к классу из класса неймспейса

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Доступ к классу из класса неймспейса

Сообщение kor1b 07 июл 2018, 18:07

Здравствуйте, появилась необходимость получить доступ к полю скрипта OpenDoor для FPSController (стандартный ассет). FPSController находится в пространстве имён и у меня не получается в нем объявить переменную типа OpenDoor openDoor, чтобы потом получить доступ к переменной openSpeed (по типу openDoor.openSpeed). Подскажите, как можно получить доступ к переменной openSpeed скрипта OpenDoor из скрипта FPSController.
P.S. FPSController - название условное
kor1b
UNIт
 
Сообщения: 121
Зарегистрирован: 25 дек 2017, 20:32

Re: Доступ к классу из класса неймспейса

Сообщение 1max1 07 июл 2018, 18:28

Как всегда говоришь загадками, которые упираются в обыкновенное незнание языка (c#)
Если класс FPSController находится в пространстве имен, к примеру NameSpace, то доступ к нему получают так NameSpace.FPSController
Аватара пользователя
1max1
Адепт
 
Сообщения: 1271
Зарегистрирован: 28 июн 2017, 10:51

Re: Доступ к классу из класса неймспейса

Сообщение kor1b 07 июл 2018, 19:22

1max1 писал(а):Как всегда говоришь загадками, которые упираются в обыкновенное незнание языка (c#)
Если класс FPSController находится в пространстве имен, к примеру NameSpace, то доступ к нему получают так NameSpace.FPSController

Хорошо, косяк свой понял. Постараюсь объяснить понятно. У меня есть скрипт OpenDoor, в котором находится необходимая мне переменная OpenSpeed. Также, у меня есть скрипт FirstPersonController (именно в нем должны происходить манипуляции с переменной OpenSpeed). Структура скрипта FirstPersonController выглядит следующим образом:
Синтаксис:
Используется csharp
namespace UnityStandardAssets.Characters.FirstPerson
{
    public class FirstPersonController : MonoBehaviour
    {
 public void OnControllerColliderHit(ControllerColliderHit hit)
        {
}
}


Так вот, задача такая: нужно получить доступ к переменной OpenSpeed из метода OnControllerColliderHit
kor1b
UNIт
 
Сообщения: 121
Зарегистрирован: 25 дек 2017, 20:32

Re: Доступ к классу из класса неймспейса

Сообщение 1max1 07 июл 2018, 19:29

Синтаксис:
Используется csharp
namespace UnityStandardAssets.Characters.FirstPerson
{
    public class FirstPersonController : MonoBehaviour
    {
        public void OnControllerColliderHit(ControllerColliderHit hit)
        {
            hit.gameObject.GetComponent<OpenDoor>().OpenSpeed = 1;
        }
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 1271
Зарегистрирован: 28 июн 2017, 10:51

Re: Доступ к классу из класса неймспейса

Сообщение kor1b 07 июл 2018, 21:01

1max1 писал(а):
Синтаксис:
Используется csharp
namespace UnityStandardAssets.Characters.FirstPerson
{
    public class FirstPersonController : MonoBehaviour
    {
        public void OnControllerColliderHit(ControllerColliderHit hit)
        {
            hit.gameObject.GetComponent<OpenDoor>().OpenSpeed = 1;
        }
    }
}

Подчеркивает <OpenDoor>(): не удалось найти тип или имя пространства имен "OpenDoor" (возможно отсутствует директива using или ссылка на сборку). Если что, то вот скрипт OpenDoor (простое открывание двери):
Синтаксис:
Используется csharp
 
using UnityEngine;

    public class OpenDoor : MonoBehaviour
    {
        bool enter = false;
        bool open = false;
        Vector3 standartRot;
        Vector3 openRot;
        public float openSpeed;
        public float degree;
        bool contact;


        private void Start()
        {

            standartRot = transform.eulerAngles;
            openRot = new Vector3(standartRot.x, standartRot.y + degree, standartRot.z);

        }

        void Update()
        {

            if (open)
            {
                transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, openRot, openSpeed * Time.deltaTime);

            }
            else
            {
                transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, standartRot, openSpeed * Time.deltaTime);

            }
            if (enter == true && Input.GetKeyDown(KeyCode.E))
                open = !open;

         
        }

        private void OnTriggerEnter(Collider other)
        {
            if (other.tag == "Player")
                enter = true;

        }

        private void OnTriggerExit(Collider other)
        {
            if (other.tag == "Player")
                enter = false;
        }
    }
 
kor1b
UNIт
 
Сообщения: 121
Зарегистрирован: 25 дек 2017, 20:32

Re: Доступ к классу из класса неймспейса

Сообщение seaman 07 июл 2018, 21:36

Попробуйте положить скрипт OpenDoor в папку Plugins
seaman
Адепт
 
Сообщения: 7489
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Доступ к классу из класса неймспейса

Сообщение 1max1 07 июл 2018, 21:57

Вангую у тебя 2 разные сборки
Можно попробовать объединить всё в одну, для этого создай файл asm def в самой корневой папке (Assets)

Изображение

вот тут еще можешь почитать про сборки https://habr.com/post/347034/
Аватара пользователя
1max1
Адепт
 
Сообщения: 1271
Зарегистрирован: 28 июн 2017, 10:51

Re: Доступ к классу из класса неймспейса

Сообщение kor1b 08 июл 2018, 20:23

1max1 писал(а):Вангую у тебя 2 разные сборки
Можно попробовать объединить всё в одну, для этого создай файл asm def в самой корневой папке (Assets)

Изображение

вот тут еще можешь почитать про сборки https://habr.com/post/347034/


Спасибо) Действительно, причина была в этом
kor1b
UNIт
 
Сообщения: 121
Зарегистрирован: 25 дек 2017, 20:32


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8