Ошибка кода Модификатор publi c недопустим. Почему? - PullRequest
0 голосов
/ 01 марта 2020

Я делаю 2D-игру в Unity и пытаюсь остановить моего подвижного персонажа каждый раз, когда на экране появляется диалог.

Я использую расширение Fungus для своего диалога, поскольку я новичок ie к кодированию. Однако все, что я пробую, я сталкиваюсь с проблемами.

Моя текущая проблема заключается в том, что модификатор 'publi c' недопустим для этого элемента.

Кто-нибудь знает, как это можно исправить ? Я приложил код ниже. Я предполагаю, что проблема связана со строками public void CantMove() и public void CanMove().

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed;
    public Rigidbody2D theRB;
    public float jumpForce;

    private bool isGrounded;
    public Transform groundCheckPoint;
    public LayerMask whatIsGround;

    private bool canDoubleJump;

    private bool canMove = true;

    private Animator anim;
    private SpriteRenderer theSR;

    // Start is called before the first frame update
    void Start()
    {
        anim = GetComponent<Animator>();
        theSR = GetComponent<SpriteRenderer>();
    }

    // Update is called once per frame
    void Update()
    {
        if(!canMove)
        {
            theRB.velocity = new Vector2(0, 0);
        }
        else
        {
            theRB.velocity = new Vector2(moveSpeed * Input.GetAxis("Horizontal"), theRB.velocity.y);
        }

        public void CantMove()
        {
            canMove = false;
        }
        public void CanMove()
        {
            canMove = true;
        }

       //theRB.velocity = new Vector2(moveSpeed * Input.GetAxis("Horizontal"), theRB.velocity.y);

       isGrounded = Physics2D.OverlapCircle(groundCheckPoint.position, .2f, whatIsGround);

       if(isGrounded)
       {
            canDoubleJump = true;
        }

       if(Input.GetButtonDown("Jump"))
       {
            if (isGrounded)
            {
                theRB.velocity = new Vector2(theRB.velocity.x, jumpForce);
            }
            else
            {
                if(canDoubleJump)
                {
                    theRB.velocity = new Vector2(theRB.velocity.x, jumpForce);
                    canDoubleJump = false;
                }
            }
        }

        if(theRB.velocity.x > 0)
        {
            theSR.flipX = true;
        }   else if(theRB.velocity.x < 0)
        {
            theSR.flipX = false;
        }

        anim.SetFloat("moveSpeed", Mathf.Abs( theRB.velocity.x));
        anim.SetBool("isGrounded", isGrounded);
    }
}

'' '

1 Ответ

1 голос
/ 01 марта 2020

Ваша проблема в том, что две ваши функции, определенные для CanMove и CantMove, объявлены внутри тела функции Update ... что делает их функциями локальной области действия, что означает, что они никогда не могут иметь публичный доступ c и могут вызываться только изнутри сама функция обновления.

Переместите эти две функции за пределы тела функции обновления следующим образом ...

void Update() {
   ...
}

public void CantMove() {
    canMove = false;
}

public void CanMove() {
    canMove = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...