1

私はこれをうまく機能させるために可能な限りの方法を試しましたが、成功しませんでした。スワイプスクリプトとゲーム/コントロールスクリプトがあります。キャラクターを制御する手段として、制御スクリプトでスワイプ制御を参照しようとしています。これまでのところ、Unity内からエラーが1つだけ発生しています。

Assets / RuinRunStarterKit / Scripts / csTempleRun.cs(307,25):エラーCS1501:メソッドUpdatePlayer' takes0'引数のオーバーロードなし

UpdatePlayerの括弧内にTouchDetector.enTouchTypeを追加しようとしましたが、1つではなく3つのエラーが発生します。私は多くの人々と連絡を取り、答えを求めて多くのサイトを訪れましたが、実際の結果を出すことができませんでした。私はプログラミングの教育を受けていません。私はプログラミングに関して何かをする方法を理解するためにオンラインで調べただけです。ここにある2番目のスクリプトは、UnityAssetStoreで購入したアセットからのものです。スワイプコントロールの追加のサポートについて彼らに連絡しました。彼らはタッチスクリプトを電子メールで送信しましたが、その実装方法を教えてくれませんでした。コントロールとしてスワイプを使用して、携帯電話でこのゲームをプレイしたいだけです。これは個人的な使用のためです。誰かが私が望ましい結果を達成するのを手伝ってくれるなら、私は本当に感謝しています。また、スワイプでキャラクターをコントロールできるようにしたい。ありがとうございました。これが私のスクリプトです:

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呼び出しの1つをTouchDetector.enTouchType.SwipeDownに置き換えたことに気付くでしょう。それでも、まだエラーが発生しています。よろしくお願いします。どうぞよろしくお願いいたします。

4

2 に答える 2

1

あなたのエラーを見てください - No overload for method UpdatePlayer' takes0' arguments。これは、メソッドに追加のデータを提供する必要があることを意味します。インテリセンスに提供する必要があるデータはどれかを教えてくれます。

于 2013-03-29T15:27:46.640 に答える
0

あなたのコードでは:

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

UpdatePlayer()引数なしで呼び出します。ただし、UpdatePlayer引数が必要です。

private void UpdatePlayer(TouchDetector.enTouchType T)
{

したがって、を呼び出すときUpdatePlayer()は、そのタイプのオブジェクトをパラメーターとして送信する必要がありTouchDetector.enTouchTypeます。それは次のいずれかになります。

  • 左スワイプ
  • 右にスワイプ
  • スワイプダウン
  • 上にスワイプする
于 2013-03-21T08:42:04.807 に答える