如何将3D空间中的所有硬币移动到2D画布的一个角落?

4
我正在尝试制作像神庙逃亡2这样的游戏。我想要与问题中所述并附带截图相同的效果。我尝试了动画,当我将硬币动画到中心顶部时它可以工作,但是左上角就没有成功。请帮忙。 谢谢
以下是代码:
if (col.gameObject.tag == "500") {
    score = CryptograpicEncryption.GetInt ("ScoreKey") + pick500;
    CryptograpicEncryption.SetInt ("ScoreKey", score);
    ScoreCount.text = "Cash Collected: " + CryptograpicEncryption.GetInt ("ScoreKey").ToString ();
    col.gameObject.GetComponent<Animator> ().SetTrigger ("openNote");
    col.gameObject.transform.GetChild (1).GetChild (1).gameObject.SetActive (false);
    col.gameObject.GetComponent<Animator> ().SetTrigger ("highLeft");
}

enter image description here

1个回答

4

这取决于你的游戏,但以下是一些选项:

  1. 给角色添加一个空的游戏对象,并仔细设置其位置,使其始终位于所需UI对象后面。然后将硬币从3D空间移动到游戏对象的3D空间位置中。

  2. 玩家获取硬币后立即将其删除,然后使用UI.Image创建一个相同的硬币(在画布的2D空间中),并立即移动到画布的角落。您可以使用 2dPosition = Camera.main.WorldToScreenPoint(3dPosition) 将3D空间位置转换为2D空间位置。

  3. 您可以使用 3dPosition = Camera.main.ScreenToWorldPoint(2dPosition) 计算画布角落的3D位置,并使硬币跟随该位置。但是,当摄像机移动时,该位置会随时间变化,因此您应该每帧重新计算它。


谢谢回复。#2听起来像是一个答案。如果还有其他选项,我会再等一段时间。否则,我会接受你的答案。 - Jamshaid Alam
@JamshaidAlam 是的,第二种方法是最合适的。在三维空间中,你的二维元素可能与无限多个位置重叠,因此很难选择一个合适的位置将三维硬币“发送”到三维空间中。也就是说,你可能希望它在任何时候都大致相同大小,这可能涉及一些棘手的投影数学问题。 - Luke Briggs
感谢 LukeBriggs 和 @Bijan。我接受这个答案,因为 #2 是解决此问题的最佳选择。干杯! - Jamshaid Alam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接