Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 骰子数始终显示为0_C#_Unity3d_3d - Fatal编程技术网

C# 骰子数始终显示为0

C# 骰子数始终显示为0,c#,unity3d,3d,C#,Unity3d,3d,我写了一个代码来在屏幕上显示骰子的数量,但是没有发生,只显示了数字0 这是我的Dice脚本: public class Dice: MonoBehaviour { public static Vector3 diceVelocity; private static Rigidbody rb; private void Start() => GetComponent<Rigidbody>(); private void Update()

我写了一个代码来在屏幕上显示骰子的数量,但是没有发生,只显示了数字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);
        }
    }
}
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
会神奇地将自己设置为正确的值,但下面是如何做到的

附加到你的骰子6个空的子游戏对象,我们只使用它们进行转换。沿立方体的6条边放置所有这些物体,并保持相同的距离(例如,沿各自的轴距中心100个单位)。要获得所需的一面,只需在6个游戏对象中循环,并找到具有最高
transform.position.z
的游戏对象,因为该面将是空中最高的,因此面朝上

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

公共游戏对象[]方;
私有int GetDiceCount()
{
KeyValuePair highestSide=getHeightForSide(0);
对于(int i=0;i
新的值对(side,Sides[side].transform.position.z);
布尔ISLARGERTANCURENTMAX(内部端)=>
值<边[side].transform.position.z;
}
请记住,虽然这会起作用,但必须在每个帧中调用它,包括在空中时。你可以让它在落地后才开始被调用,也可以在你检测到立方体停止滚动时被调用(不管你打算如何检测,我只是回答你的一个问题,而不是为你编写整个程序)


另外,请注意,我使用的是
I
而不是
I<6
。这样,如果您决定制作更多不同大小的骰子,而不仅仅是D6,您可以重用此脚本。除了D4。那些死亡很奇怪。可能也不是D2,但我不认为你是在游戏中添加硬币xP

你在哪里更改“diceNumber”的值?我只看到你将其设置为0<代码>DiceNumberText.diceNumber=0你在做什么来增加数字?等一下,你是在试图找到骰子的数量,还是骰子的值,换句话说,哪一边是向上的?为什么你的屏幕截图上有一堆标记,无法帮助用户识别任何东西?用于确定D4的方向(并从顶部查看)。@Draco18s哦,这很有趣。我想有两种类型的D4,一种适用于你的脚本,另一种不适用,这就是我想到D4时想到的类型,虽然我不知道哪一种更常见。我想编程“edge”类型的过程正好相反,其中,它是具有最低
z
值的数字。我发现他们可以使用与其他立方体相同的脚本,考虑到他们的设计。哦,这两种类型都有。当我做掷骰子时,我选择了角型,因为我显示结果的方式(并且我对所有柏拉图式实体做了方向数学)。(另一种使用d4的方法是使用两次编号的d8或三次编号的d12)。这太酷了。我不知道为什么,但我觉得骰子很有趣。我认为这是因为它们所象征的:随机性和偶然性,在某种程度上,我觉得电子游戏来自骰子和纸牌。
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;
}