我写了一个代码来显示屏幕上骰子的数量,但这不会发生,只显示数字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();
}
答案 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