簡體   English   中英

我想創建評分系統(Unity 2D)

[英]I want to create scoring system (Unity 2D)

我正在制作類似吃豆人的 2D 游戲。 盡管如此,我在創建評分系統時遇到了一些問題。

每當我的 Pacman 吃硬幣(又名 pacdot)時,我都想更新分數

我制作了名為“ScoreManager”的 C# 腳本

這是代碼

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

public class ScoreManager : MonoBehaviour {

    static int score = 0;

    public static void setScore(int value)
    {
        score += value;
    }

    public static int getScore()
    {
        return score;
    }

    void OnGUI ()
    {
        GUILayout.Label("Score: " + score.ToString());
    }
}

當我在 Unity 引擎中玩游戲時,此代碼運行良好

但是,我不知道如何在 Pacdot 腳本中設置 ScoreValue。

這是 Pacdot 代碼

using UnityEngine;
using System.Collections;

public class Pacdot : MonoBehaviour {

    public int score = 10;

    void OnTriggerEnter2D(Collider2D co) {
        if (co.name == "pacman")
        {           
            Destroy(gameObject);
        }

    }
}

另外,我添加了 C# 腳本( Pacmanbehaviour )

using UnityEngine;
using System.Collections;

public class PacmanMove : MonoBehaviour {
    public float speed = 0.4f;
    Vector2 dest = Vector2.zero;

    void Start() {
        dest = transform.position;
    }

    void FixedUpdate() {
        // Move closer to Destination
        Vector2 p = Vector2.MoveTowards(transform.position, dest, speed);
        GetComponent<Rigidbody2D>().MovePosition(p);

        // Check for Input if not moving
        if ((Vector2)transform.position == dest) {
            if (Input.GetKey(KeyCode.UpArrow) && valid(Vector2.up))
                dest = (Vector2)transform.position + Vector2.up;
            if (Input.GetKey(KeyCode.RightArrow) && valid(Vector2.right))
                dest = (Vector2)transform.position + Vector2.right;
            if (Input.GetKey(KeyCode.DownArrow) && valid(-Vector2.up))
                dest = (Vector2)transform.position - Vector2.up;
            if (Input.GetKey(KeyCode.LeftArrow) && valid(-Vector2.right))
                dest = (Vector2)transform.position - Vector2.right;
        }

        // Animation Parameters
        Vector2 dir = dest - (Vector2)transform.position;
        GetComponent<Animator>().SetFloat("DirX", dir.x);
        GetComponent<Animator>().SetFloat("DirY", dir.y);
    }

    bool valid(Vector2 dir) {
        // Cast Line from 'next to Pac-Man' to 'Pac-Man'
        Vector2 pos = transform.position;
        RaycastHit2D hit = Physics2D.Linecast(pos + dir, pos);
        return (hit.collider == GetComponent<Collider2D>());
    }
}

ScoreManager 腳本需要作為游戲對象或作為游戲對象中的組件存在。 然后您可以將其添加為 Pacdot 類中的字段。

它將類似於下面的內容,但是找到腳本附加到的特定游戲對象將取決於您的設計方式(除非您有一個附加了 ScoreManager 的游戲對象,否則“按標簽查找”方法將不起作用,帶有那個標簽)。

 using UnityEngine; using System.Collections; public class Pacdot : MonoBehaviour { public int score = 10; private ScoreManager _score = GameObject.findGameObjectWithTag("scoreKeeper").GetComponent<ScoreManager>(); void OnTriggerEnter2D(Collider2D co) { if (co.name == "pacman") { _score.SetScore(score); Destroy(gameObject); } } }

我還會查看鏈接到的@derHugo 答案 - 有很多方法可以實現這一點,具體取決於您的需求/設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM