Страница 1 из 1

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

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

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

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

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

СообщениеДобавлено: 07 июл 2018, 19:22
kor1b
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

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

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

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

СообщениеДобавлено: 07 июл 2018, 21:01
kor1b
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;
        }
    }
 

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

СообщениеДобавлено: 07 июл 2018, 21:36
seaman
Попробуйте положить скрипт OpenDoor в папку Plugins

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

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

Изображение

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

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

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

Изображение

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


Спасибо) Действительно, причина была в этом