You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity骰子数值始终显示0问题求助

搞定骰子一直显示0的问题

嘿,我瞅了下你的Dice脚本,问题其实挺明显的,咱一步步来解决:

第一个大坑:Rigidbody没赋值!

你在Start方法里只写了GetComponent<Rigidbody>(),但根本没把这个组件实例存到rb变量里啊!这就导致rb一直是null,后续所有和刚体相关的逻辑都跑不起来,搞不好还会报错。赶紧改成这样:

private void Start() 
{
    rb = GetComponent<Rigidbody>(); // 把获取到的刚体组件赋值给rb变量
}

第二个核心问题:完全没写点数计算逻辑!

你现在的代码只是按左键时把diceNumber设成0,那它当然一直显示0啊!得等骰子停下来之后,根据它的朝向判断哪一面朝上,然后更新点数才行。给你补全这部分逻辑:

先修改Update方法,加上摇骰子的触发和静止检测,再新增一个计算点数的方法:

private void Update() 
{
    // 先做个空值保护,避免rb为空时报错
    diceVelocity = rb?.velocity ?? Vector3.zero;

    // 用GetKeyDown才是按一次触发一次摇骰子,GetKey会一直触发,不合适
    if (Input.GetKeyDown(KeyCode.LeftArrow)) 
    {
        // 给骰子加随机力,正负范围摇起来更自然
        rb.AddForce(Random.Range(-500, 500), Random.Range(-500, 500), Random.Range(-500, 500));
        DiceNumberText.diceNumber = 0; // 摇的时候先显示0,等静止再更新
    }

    // 当骰子速度几乎为0时,说明静止了,计算点数
    if (rb != null && diceVelocity.magnitude < 0.1f)
    {
        CalculateDiceNumber();
    }
}

private void CalculateDiceNumber()
{
    // 这里假设骰子的面朝向对应点数:Y朝上是1,Y朝下是6;X朝右是2,X朝左是5;Z朝前是3,Z朝后是4
    // 你可以根据自己的骰子模型调整对应关系
    Vector3[] faceDirections = new Vector3[]
    {
        Vector3.up, Vector3.down,
        Vector3.right, Vector3.left,
        Vector3.forward, Vector3.back
    };
    int[] faceNumbers = new int[] {1, 6, 2, 5, 3, 4};

    float closestDot = -1;
    int currentDiceNumber = 0;

    // 遍历每个面,找出和世界Y轴夹角最小的那个面(也就是朝上的面)
    for (int i = 0; i < faceDirections.Length; i++)
    {
        // 把本地方向转成世界方向,再和Y轴做点积
        float dotProduct = Vector3.Dot(transform.TransformDirection(faceDirections[i]), Vector3.up);
        if (dotProduct > closestDot)
        {
            closestDot = dotProduct;
            currentDiceNumber = faceNumbers[i];
        }
    }

    // 更新显示的点数
    DiceNumberText.diceNumber = currentDiceNumber;
}

最后再检查两个小细节:

  • 确保你的骰子对象上确实添加了Rigidbody组件,并且勾选了Use Gravity,不然骰子不会自然下落静止
  • 检查DiceNumberText脚本里的diceNumber变量是不是正确绑定到了UI文本组件,并且有在数值变化时刷新显示的逻辑(比如在diceNumber的setter里更新Text.text

这样改完之后,骰子应该就能正常显示点数啦!

内容的提问来源于stack exchange,提问作者As Ma Rezgui

火山引擎 最新活动