Unity中特定项目的C#编码问题

时间:2019-01-24 15:55:58

标签: c# unity3d

我正在使用Unity为学校项目制作一个简单的游戏。游戏的目的是控制球并捡起硬币。游戏中有3个场景。我已经用C#编写了一些代码来计数我捡起的硬币,并设置了一个条件来检查是否捡起了所有硬币,如果这样,一个wintext出现在屏幕中央。 它仅适用于第一个场景(lvl1),但不适用于其他场景2。 所有3个场景的硬币数量都不相同。 C#对我来说是新手,我尝试了各种组合,但没有用。 我如何重新编写此代码,以便在我在每个场景/级别拾取正确数量的硬币后出现wintext? 这是我的代码:

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 :(得分:4)

新建一个公共变量

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

记住要在编辑器中为每个场景设置此新值

根据情况使用变量。

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

听起来像您对C#和总体编程缺乏基本的了解。您可以研究以下一些方法来使您的生活更轻松:

  • 变量
  • 控制流
  • 访问修饰符
  • 课程(计算机科学)
  • 面向对象

使用Unity学习C#也不是很好。您将错过很多基础知识。我建议学习C#在没有团结的情况下持续一到两个星期再回来。

答案 1 :(得分:0)

此代码段将根据场景动态设置获胜条件,但是如果场景可以容纳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!";
    }

}