【问题标题】:Unity Game ScoreUnity 游戏分数
【发布时间】:2017-04-23 21:32:47
【问题描述】:

我知道有很多关于统一分数等的问题,但是我发现很难为我的游戏实际构建代码,并查看了大量的 youtube 教程和博客文章。我想知道是否有人可以帮我添加一个分数,这样每次我在我的隐藏对象游戏中单击我的一个对象时,它都会提供一个分数。我真的很感激。到目前为止,我已经添加了一个名为 Score.cs 的单独脚本。代码如下。然后我将它添加到我的背景图像中,并将脚本包含在我的乐谱文本位于画布内的每个对象中,并且当前不计算任何被单击的对象。

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

public class Score : MonoBehaviour {

    public Text scoreText;
    public int gameObject;

    private int score;
    // Use this for initialization

    void Start () {
        score = 0;
        UpdateScore ();
    }
    void OnMouseDown () {
        score += gameObject;
        UpdateScore ();
    }
    // Update is called once per frame
    void UpdateScore () {
        scoreText.text = "Score:\n" + score;

    }
}

!***** 编辑(Score.cs)*****!

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

public class Score : MonoBehaviour {

    public Text scoreText;
    public int gameObject;

    public int score;
    // Use this for initialization

    void Start () {
        score = 0;
        UpdateScore ();
    }
    void OnMouseDown () {
        score += gameObject;
        UpdateScore ();
    }
    // Update is called once per frame
    void UpdateScore () {
        scoreText.text = "Score:\n" + score;

    }
}

!****** Clicker.cs ******!

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

public class Clicker : MonoBehaviour, IPointerClickHandler
 {

    Score score;

    void Start()
    {
        addPhysics2DRaycaster();
        //Get Score Script Instance
        string scoreObject = "gameObject";
        score = GameObject.Find(scoreObject).GetComponent<Score>();
    }
    void addPhysics2DRaycaster()
    {
        Physics2DRaycaster physicsRaycaster = GameObject.FindObjectOfType<Physics2DRaycaster>();
        if (physicsRaycaster == null)
        {
            Camera.main.gameObject.AddComponent<Physics2DRaycaster>();
        }
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        //Click detected. Increment score
        score.score++;
        Debug.Log("Clicked: " + eventData.pointerCurrentRaycast.gameObject.name);

    }

}

【问题讨论】:

  • 我在我的隐藏对象游戏中单击我的一个对象,它会提供分数。”“提供分数”是什么意思
  • @programmer,对不起,我应该描述得更好一点,我的意思是当玩家点击每个对象时,每次得分都会逐渐上升

标签: c# unity3d 2d


【解决方案1】:

真的很简单。创建一个检测您的游戏对象点击的脚本。您可以为此使用OnPointerClick。从该脚本中获取Score 脚本的实例,然后在调用OnPointerClick 时增加分数变量。

确保将private int score; 更改为public int score;

将脚本附加到您要检测点击的每个对象。

public class Clicker : MonoBehaviour, IPointerClickHandler
{
    Score score;

    void Start()
    {
        //Get Score Script Instance
        string scoreObject = "GameObjectScoreIsAttachedTo";
        score = GameObject.Find(scoreObject).GetComponent<Score>();
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        //Click detected. Increment score
        score.score++;

    }
}

如果您的对象是2D,则需要添加addPhysics2DRaycaster() 函数。如果是3D,则需要添加addPhysicsRaycaster() 函数。请参阅here 了解更多信息。

【讨论】:

  • 非常感谢您回复我,我只是尝试过,一旦用户点击分数,仍然无法逐步更新分数。我收到错误“NullReferenceException:对象引用未设置为对象 Clicker.Start () 的实例(在 Assets/Clicker.cs:16)”
  • "GameObjectScoreIsAttachedTo" 应该是您的问题中的Score 附加到的游戏对象的名称.....将其替换为该游戏对象的名称。
  • 我刚刚尝试过,即使我使用的是游戏对象的名称,似乎仍然收到相同的消息消息。你介意我把我的游戏发给你看吗,我将不胜感激
  • 我现在不在我的测试计算机上,现在不能这样做。使用附有Score 脚本的游戏对象的屏幕截图更新您的问题。此外,在您编辑的问题中添加 Edit** 并添加我的答案中的代码。你正在使用的那个。也许我能发现问题。
  • @Rochelle 带有Score 脚本的 GameObject 被命名为 "office" 而不是 "gameObject"。所以string scoreObject = "gameObject"; 应该是string scoreObject = "office";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2019-02-10
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多