【问题标题】:Dice number always shows 0骰子数总是显示 0
【发布时间】:2018-05-04 00:50:45
【问题描述】:

我写了一个代码来在屏幕上显示骰子的数量,但这并没有发生,只显示数字 0。

这是我的Dice 脚本:

public class Dice: MonoBehaviour 
{
    public static Vector3 diceVelocity;
    private static Rigidbody rb;

    private void Start() => GetComponent<Rigidbody>();
    private void Update() 
    {
        diceVelocity = rb.velocity;

        if (Input.GetKey("left")) 
        {
            DiceNumberText.diceNumber = 0;

            float dirX = Random.Range(0, 500);
            float dirY = Random.Range(0, 500);
            float dirZ = Random.Range(0, 500);

            transform.position = new Vector3(0, 2, 0);
            transform.rotation = Quaternion.identity;

            rb.AddForce(transform.up * 500);
            rb.AddTorque(dirX, dirY, dirZ);
        }
    }
}

还有我的DiceNumberText 脚本:

public class DiceNumberText : MonoBehaviour 
{
    public static int diceNumber;
    private Text text;

    private void Start()  => text = GetComponent< Text>();
    private void Update() => text.text = diceNumber.ToString(); 
}

【问题讨论】:

  • 你在哪里改变“diceNumber”的值我只看到你把它设置为0。DiceNumberText.diceNumber = 0;
  • 你在做什么应该增加数字?
  • 等一下,你是想找出骰子的个数,还是骰子的点数,或者说,哪一边朝上?
  • 为什么你的屏幕截图上有一堆标记,对用户没有任何帮助?

标签: c# unity3d 3d


【解决方案1】:

不知道为什么您认为DiceNumber 会神奇地将自己设置为正确的值,但可以这样做。

将 6 个空的子游戏对象附加到您的骰子上,我们仅将它们用于变换。将它们全部放在立方体的 6 个边上,距离相同(例如,沿各自轴距中心 100 个单位)。要获得所需的一面,只需遍历 6 个游戏对象并找到具有最高 transform.position.z 的游戏对象,因为该面将在空中最高,因此面朝上。

调用检查Update() 上哪一侧最高的方法。

public GameObject[] Sides;

private int GetDiceCount()
{
    KeyValuePair<int, float> highestSide = getHeightForSide(0);

    for (int i = 0; i < Sides.Length; i++)
    {
        if (isLargerThanCurrentMax(i))
            highestSide = getHeightOfSide;
    }

    return highestSide.Key;

    KeyValuePair<int, float> getHeightOfSide(int side) => 
         new ValuePair<int, float>(side, Sides[side].transform.position.z);
    bool isLargerThanCurrentMax(int side) =>
         highestSide.Value < Sides[side].transform.position.z;
}

请记住,虽然这会起作用,但必须在每一帧都调用它,包括它在空中的时候。您可以只在它落地时才开始调用它,也可以在检测到立方体停止滚动时调用它(但是您打算检测到这一点,我只是在回答您的一个问题,而不是要写出您是完整的为您准备的程序)。

另外,请注意我使用的是i &lt; Sides.Length 而不是i &lt; 6。这样,如果您决定要制作更多不同大小的骰子,而不仅仅是 D6,您可以重用此脚本。 D4除外。那些死的很奇怪。而且可能也不是 D2,但我认为你无论如何都不会在游戏中添加硬币 xP

【讨论】:

  • Here's the math 用于定位 D4 arranged thusly(从顶部查看)。
  • @Draco18s 这很有趣。我想有两种类型的 D4,有this corner type 可以与您的脚本一起使用,然后有this edge type 不会,这是我想到 D4 时想到的那种,虽然我不知道哪个更常见。
  • 我想对“edge”类型进行编程将是完全相反的过程,无论哪个数字具有最低的z 值。我找到了these D4,根据他们的设计,他们可以使用与其他多维数据集相同的脚本。
  • 哦,肯定有两种类型。当我做我的掷骰子时,我选择了角类型因为我显示结果的方式(我对所有柏拉图立体做了方向数学)。 (另一种 d4 方法是使用 d8 编号两次,或 d12 编号三次)。
  • 太酷了。不知道为什么,但我觉得骰子很有趣。我认为这是因为它们象征着:随机性和机会,而且我觉得在某种程度上,电子游戏来自骰子和纸牌。
猜你喜欢
  • 2013-07-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多