當你用你在平臺上彈跳的球女巫摧毀盒子時,我有游戲(標準 2d 游戲)。而且我有正在生成的電源,它們是球的倍數,當球碰到樓下的墻壁時,它被摧毀了。我有一個程式,當球的數量被乘以它時,它會設定球的數量 1,但有一件事不能正常作業。
球上的腳本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ball2 : MonoBehaviour
{
private Rigidbody2D rb;
public GameObject ball;
[SerializeField]
private int forceOne = 10;
[SerializeField]
private int forceTwo = 15;
private float balls;
public float numBalls = 1;
void Start()
{
rb = GetComponent<Rigidbody2D>();
rb.AddForce(new Vector2(forceOne * 25f, forceTwo * 25f));
balls = numBalls;
}
public void Copy()
{
Instantiate(ball, this.transform.position, Quaternion.identity);
balls ;
}
}
我正在嘗試將其與平臺上的腳本聯系起來,女巫是:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class movement : MonoBehaviour
{
[SerializeField]
private float speed = 10f;
public int startBoxes = 120;
private int boxes;
private string MUL_TAG = "mul";
private float movementX;
private void Start()
{
boxes = startBoxes;
}
private void Update()
{
Movement();
}
public void Destroy()
{
boxes--;
if (boxes <= 0)
endGame();
}
private void endGame()
{
SceneManager.LoadScene("level_");
}
private void Movement()
{
movementX = Input.GetAxisRaw("Horizontal");
transform.position = new Vector3 (movementX, 0f, 0f) * Time.deltaTime * speed;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag(MUL_TAG))
{
ball2 PBDM = FindObjectOfType<ball2>();
PBDM.Copy();
}
}
public void balls()
{
if (balls <= 0)
SceneManager.LoadScene("loseScreen");
}
}
但在球函式的最后一部分中,它有一個錯誤:運算子'<='不能應用于'method group'和'int'型別的運算元。我試圖將 int 更改為 float 但它不起作用。所以我的觀點是,當所有的球都被摧毀時,你就輸了。
PS我想知道是否:ball2 PBDM = FindObjectOfType(); PBDM 你可以改變它還是它實際上是一個想法?例如:
ball2 TEXT = FindObjectOfType(); 文本.復制();
uj5u.com熱心網友回復:
該變數balls
僅定義為“ball2”類中的私有變數。除了“ball2”類的那個實體之外,任何東西都無法訪問它。附帶說明一下,如果您在球上運行“Copy()”,每個新球將獲得一個單獨的“balls”變數實體。它們不會是相同的值。您可以創建一個游戲管理器預制件,然后制作該副本并跟蹤球。這可能是解決此問題的更好、更標準的方法。有關于 Singletons 和 Game manager prefabs這樣的指南,但這里有一個例子:
public class GameManager : MonoBehaviour
{
private static _instance = null;
public static GameManager Instance
{
get
{
if (_instance == null)
{
_instance = this;
}
else
{
Destroy(gameObject);
}
return _instance;
}
}
private int _balls;
public int Balls
{
get => _balls;
set
{
int oldValue = _balls;
_balls = value;
OnBallsChanged(oldValue);
}
}
private void OnBallsChanged (int oldValue)
{
if (Balls <= 0)
{
SceneManager.LoadScene("loseScreen");
}
}
}
uj5u.com熱心網友回復:
balls
類中的任何地方都沒有宣告變數movement
。那么,它試圖與什么進行比較<=
?好吧,您使用該名稱宣告的唯一內容是一個名為balls
. 方法不是數字,它們是方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/481573.html
標籤:C# 视觉工作室 unity3d 运营商 c#-2.0
上一篇:C#如何匯入ntdll.dll來使用NtDelayExecution和ZwSetTimerResolution?