Unity3d, как ссылаться на управление прокруткой из другого скрипта?

Я пытался всеми возможными способами заставить это работать, но безуспешно. У меня есть скрипт свайпа и скрипт игры/управления. Я пытаюсь сослаться на управление смахиванием в своем сценарии управления как на средство управления моим персонажем. Пока я получаю только одну ошибку из Unity.

Assets/RuinRunStarterKit/Scripts/csTempleRun.cs(307,25): ошибка CS1501: нет перегрузки для аргументов метода UpdatePlayer' takes0

Я попытался добавить TouchDetector.enTouchType в скобках UpdatePlayer, но это дает мне три ошибки, а не одну. Я связался со многими людьми и посетил множество сайтов в поисках ответов, но не смог получить рабочий результат. У меня нет образования в области программирования. Я только исследовал онлайн, чтобы выяснить, как сделать что-то, что касается программирования. Второй сценарий, который у меня есть, взят из актива, который я купил в магазине активов Unity. Я связался с ними для поддержки добавления элементов управления смахиванием, и они отправили мне по электронной почте сенсорный сценарий, но не сказали мне, как его реализовать. Я просто хочу играть в эту игру на своем телефоне, используя свайпы в качестве элементов управления. Это для личного пользования. Я был бы очень признателен, если бы кто-то помог мне достичь желаемых результатов. Опять же, я хочу иметь возможность управлять персонажем с помощью свайпа. Спасибо. Вот мои скрипты:

TouchDetector.cs;

    using UnityEngine;
    using System.Collections;

    public class TouchDetector : MonoBehaviour {
public delegate void deTouchEvent
    (enTouchType touchType);

public static event
    deTouchEvent
    evTouchEvent;

public enum enTouchType
{
    SwipeLeft,
    SwipeRight,
    SwipeDown,
    SwipeUp,
}   

void Start ()
{   
}   

void Update ()
{   
    if (evTouchEvent == null)
        return;

    if (Input.GetKeyDown(KeyCode.UpArrow   )) evTouchEvent(enTouchType.SwipeUp   );
    if (Input.GetKeyDown(KeyCode.DownArrow )) evTouchEvent(enTouchType.SwipeDown );
    if (Input.GetKeyDown(KeyCode.LeftArrow )) evTouchEvent(enTouchType.SwipeLeft );
    if (Input.GetKeyDown(KeyCode.RightArrow)) evTouchEvent(enTouchType.SwipeRight);

    if (Input.touchCount > 0)
    {
        foreach (Touch t in Input.touches)
        {
            Vector3 swipe = t.deltaPosition * t.deltaTime;

            if (swipe.y >  0.5f) evTouchEvent(enTouchType.SwipeUp   );
            if (swipe.y < -0.5f) evTouchEvent(enTouchType.SwipeDown );
            if (swipe.x >  0.5f) evTouchEvent(enTouchType.SwipeRight);
            if (swipe.x < -0.5f) evTouchEvent(enTouchType.SwipeLeft );
        }
    }
}
    }

csTempleRun.cs;

    void Update () 
    {   
        UpdatePlayer();

        if (m_player != null)
        {
            // Make the camera follow the player (if active)
            SmoothFollow sF = (SmoothFollow)Camera.mainCamera.GetComponent(typeof(SmoothFollow));
            sF.target = m_player.transform;         

            // Check for collisions with interactive objects
            UpdateCoins();
            UpdateMines();

            // Dynamically update the track
            CreateNewCellsIfNeeded(false);
        }       
    }


    private void UpdatePlayer(TouchDetector.enTouchType T)
{
    // if the player is dead (replaced with ragdoll) then exit since none of this code should fire.
    if (m_player == null) 
    {
        return;     
    }



    // Gradually increase the players' running speed, and update the animation to match.
    m_playerRunSpeed += Time.deltaTime * 0.005f;
    m_playerRunSpeed = Mathf.Clamp(m_playerRunSpeed, 0.5f, 3.0f);
    m_player.animation["run"].speed = m_playerRunSpeed * 2.0f;

    // ****************************************************************************************
    // INPUT

    // Player can only turn if they are not already sliding / jumping.  
    // Equally, sliding / jumping are mutually exclusive.

    if (Input.GetKeyDown (KeyCode.LeftArrow)&& m_playerJump <= -1.0f && m_playerSlide <=0.0f)
    {
        if (m_playerDirection == enCellDir.North) m_playerNextDirection = enCellDir.West;
        if (m_playerDirection == enCellDir.East ) m_playerNextDirection = enCellDir.North;
        if (m_playerDirection == enCellDir.South) m_playerNextDirection = enCellDir.East;
        if (m_playerDirection == enCellDir.West ) m_playerNextDirection = enCellDir.South;
    }

    if (Input.GetKeyDown(KeyCode.RightArrow) && m_playerJump <= -1.0f && m_playerSlide <=0.0f)
    {
        if (m_playerDirection == enCellDir.North) m_playerNextDirection = enCellDir.East;
        if (m_playerDirection == enCellDir.East ) m_playerNextDirection = enCellDir.South;
        if (m_playerDirection == enCellDir.South) m_playerNextDirection = enCellDir.West;
        if (m_playerDirection == enCellDir.West ) m_playerNextDirection = enCellDir.North;
    }   

    if (T==TouchDetector.enTouchType.SwipeDown && m_playerJump <= -1.0f && m_playerSlide <=0.0f)
    {
        m_playerSlide = 1.0f;
        m_player.animation.Play("slide_fake");
    }            

    if ((Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.Space)) && m_playerJump <= -1.0f && m_playerSlide <=0.0f)
    {
        AudioSource.PlayClipAtPoint(m_jumpAudio, m_player.transform.position);
        m_playerJump = 1.0f;
        m_playerYvel = 0.0f;
        m_player.animation.Play("jump");
    }

Я надеюсь, что не делаю ничего плохого, публикуя этот сценарий, но я чувствую, что должен опубликовать это, чтобы получить необходимую мне помощь. Вы заметите, что в сценарии csTempleRun.cs я заменил один из вызовов KeyCode на TouchDetector.enTouchType.SwipeDown. Тем не менее, я все еще получаю сообщение об ошибке. Заранее благодарим вас за любую помощь. Спасибо за ваше время.


person Steve C.    schedule 21.03.2013    source источник


Ответы (2)


Посмотрите на свою ошибку - No overload for method UpdatePlayer' takes0' arguments. Это означает, что вам нужно предоставить дополнительные данные для вашего метода. IntelliSense может подсказать, какие данные вам нужно предоставить.

person Igor Lozovsky    schedule 29.03.2013
comment
Чувак, ты можешь нажимать кнопку "-1" 100 раз, если ты даже не можешь прочитать сообщение компилятора, о чем мне с тобой говорить? Читать книги... - person Igor Lozovsky; 29.03.2013

В вашем коде:

void Update () 
{   
    UpdatePlayer(); 
    ...

Вы вызываете UpdatePlayer() без аргументов. Однако UpdatePlayer нужен аргумент:

private void UpdatePlayer(TouchDetector.enTouchType T)
{

Итак, когда вы вызываете UpdatePlayer(), вам нужно отправить объект типа TouchDetector.enTouchType в качестве параметра. Это будет одно из следующего:

  • Проведите пальцем влево
  • Проведите вправо
  • Проведите вниз
  • Проведите вверх
person Joetjah    schedule 21.03.2013
comment
Думаю, я правильно вас понял. Я переместил TouchDetector.enTouchType T в первый вызов UpdatePlayer() в методе Update(), но это дало мне несколько ошибок. Мне нужно использовать все четыре направления смахивания. - person Steve C.; 23.03.2013