骰子编号始终显示为0

时间:2018-05-04 00:50:45

标签: c# unity3d 3d

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

enter image description here

这是我的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(); 
}

1 个答案:

答案 0 :(得分:0)

不确定为什么你认为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;
}

请记住,虽然这会起作用,但必须在每一帧都进行调用,包括它在空中。你可以让这个只有在它碰到地面时才被调用,或者一旦你发现立方体停止滚动就被调用(但是你计划检测到它,我只是回答你的一个问题,而不是写你的#&# 39;为你重新整个计划。)

另请注意,我使用i < Sides.Length而不是i < 6。这样,如果您决定要制作不同于D6的不同尺寸的骰子,您可以重复使用此脚本。除了D4。那些死是很奇怪的。也许也不是D2,但我不认为你正在玩游戏中添加硬币xP