Unity: «Jostick.inputVector» недоступен из-за уровня защиты - PullRequest
0 голосов
/ 10 января 2019

Я новичок в использовании C # и пытаюсь создать сенсорный контроллер, но когда он компилируется, выдает следующую ошибку:

Jostick.inputVector недоступен из-за уровня защиты.

Ниже приведен скрипт:

using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;

public class CalleAll : MonoBehaviour 
{
    public FixedJoystick MoveJoystick;
    public FixedTouchField TouchField;

    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void Update () {
        var fps = GetComponent<RigidbodyFirstPersonController>();

        fps.RunAxis = MoveJoystick.inputVector;
        fps.mouseLook.LookAxis=TouchField.TouchDist;
    }
}

А это файл скрипта.

using UnityEngine;
using UnityEngine.EventSystems;

public class FixedJoystick : Joystick
{
    public Vector2 joystickPosition = Vector2.zero;
    private Camera cam = new Camera();

    void Start()
    {
        joystickPosition = RectTransformUtility.WorldToScreenPoint(cam, background.position);
    }

    public override void OnDrag(PointerEventData eventData)
    {
        Vector2 direction = eventData.position - joystickPosition;
        ///here it is
        inputVector = (direction.magnitude > background.sizeDelta.x / 2f) ? direction.normalized : direction / (background.sizeDelta.x / 2f);
        ClampJoystick();
        handle.anchoredPosition = (inputVector * background.sizeDelta.x / 2f) * handleLimit;
    }

    public override void OnPointerDown(PointerEventData eventData)
    {
        OnDrag(eventData);
    }

    public override void OnPointerUp(PointerEventData eventData)
    {
        inputVector = Vector2.zero;
        handle.anchoredPosition = Vector2.zero;
    }
}

1 Ответ

0 голосов
/ 10 января 2019

Ошибка в том, что класс Joystick имеет член protected, уже названный inputVector - вы не можете использовать его из других типов, кроме его подклассов (именно поэтому FixedJoystick может использовать его, но не CalleAll, поскольку CalleAll не является производным от Joystick).

Вы можете сделать данные доступными для потребителей, создав свойство «только для чтения», которое предоставляет данные:

class FixedJoystick : Joystick
{
    public Vector2 InputVector
    {
        get { return this.inputVector; }
    }
}

class CalleAll : MonoBehaviour
{
    void Update()
    {
        var fps = GetComponent<RigidbodyFirstPersonController>();
        fps.RunAxis = this.MoveJoystick.InputVector;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...