C# 骰子数始终显示为0
我写了一个代码来在屏幕上显示骰子的数量,但是没有发生,只显示了数字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()
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;
}