Проблемы с кодированием C # в Unity для конкретного проекта - PullRequest
0 голосов
/ 24 января 2019

Я делаю простую игру для школьного проекта с использованием Unity. Цель игры - управлять мячом и собирать монеты. В игре 3 сцены. Я написал некоторый код на C #, чтобы подсчитать мои забранные монеты и установить условие, чтобы проверить, все ли монеты подобраны, если это так, в центре экрана появляется текст. Он отлично работает для первой сцены (lvl1), но не для других 2. Все 3 сцены имеют различное количество монет. C # является новым для меня, и я пробовал различные комбинации, но это не сработало. Как мне переписать этот код так, чтобы после того, как я выбрал правильное количество монет на каждой сцене / уровне, появляется открытый текст? Это мой код:

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

public class PlayerController : MonoBehaviour
{

    public float speed;
    public Text countText;
    public Text winText;

    private Rigidbody rb;
    private int count;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText();
        winText.text = "";

    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            count = count + 1;
            SetCountText();

        }
    }

    void SetCountText()
    {
        countText.text = "Coins: " + count.ToString();
        if (count >= 2)
        {
            winText.text = "You Win!";
        }

    }

}

Ответы [ 2 ]

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

Создать новую публичную переменную

...
public float speed;
public Text countText;
public Text winText;
public int numberOfCoinsToWin;
... 

не забудьте установить это новое значение в редакторе для каждой сцены

Используйте переменную в вашем состоянии.

if (count >= numberOfCoinstoWin)
{
    winText.text = "You Win!";
}

Звучит так, будто вам не хватает базового понимания C # и программирования в целом. Вот кое-что, что вы могли бы исследовать, чтобы облегчить вам жизнь:

  • переменные
  • поток управления
  • модификаторы доступа
  • занятия (по информатике)
  • ориентация объекта

Также использование Unity для изучения C # не очень хорошо. Вы пропустите много основ. Я предлагаю изучать C # без единства в течение недели или 2 и возвращаться.

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

Этот фрагмент кода будет динамически устанавливать условие выигрыша на основе сцены, однако было бы лучше, если бы сцена могла содержать переменную coinToCollect.

void SetCountText()
{
    countText.text = "Coins: " + count.ToString();
    int coinsToCollect = 0;
    switch( /* get current scene here */)
    {
        case "scene1": // repeat for other scenes
            coinsToCollect = 2;
            break;
    }
    if (count >= coinsToCollect)
    {
        winText.text = "You Win!";
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...