【问题标题】:How can I instantiate a prefab to the side of object you collide with?如何将预制件实例化到您碰撞的对象的一侧?
【发布时间】:2021-10-12 14:50:28
【问题描述】:

我正在尝试让我的玩家降落在一块瓷砖上,如果它降落在该瓷砖上,则在你着陆的瓷砖一侧放置一个新瓷砖。目前我是如何拥有它的,它将新磁贴放在第一个起始磁贴上。我添加了一张照片以帮助理解我试图实现的目标。白色方块是玩家,我希望蓝色左边的红色方块在我所在方块的左边。Instantiate(mutatedTile, new Vector3(-2, 0, 0), Quaternion.identity);

【问题讨论】:

  • 有很多关于检测命中/碰撞位置的教程。试着找到一个,因为它涵盖了你需要的东西

标签: c# unity3d 3d instantiation


【解决方案1】:

假设一个瓦片占据一个单位,那么如果你想,例如,放置一个瓦片:

播放器左侧:

tile.position = new Vector3(Mathf.RoundToInt(player.position.x) - 1, player.position.y, player.position.z);

在玩家面前:

tile.position = new Vector3(player.position.x, player.position.y, Math.RoundToInt(player.position.z) - 1);

通过这种方式,图块被放置在具有整数坐标的抽象网格上。

P.S.:如果你的 tile 占用超过一个单位,那么你需要用一定的步长将它四舍五入。 例如,如果您的 tile 大小为 10x10,那么坐标必须是 10 的倍数。如果您需要一个用于增量舍入的函数,那么您可以问 - 我会扔掉它。

我希望我想出了一个主意。

【讨论】:

  • 这似乎肯定会起作用,但我对此很陌生..我不确定如何实际添加它。
  • 在创建磁贴后尝试这样做: var tile = Instantiate(Object); tile.transform.position = new Vector3(Mathf.RoundToInt(player.position.x) - 1, player.position.y, player.position.z);其中“玩家”是立方体的变换。
  • In front of the player 应该是 z + 1 而不是 - 1 ;)
  • 这取决于相机的正面是什么。而且,没有太大的区别,任何人都有足够的大脑将“-”从“+”改成“+”。
猜你喜欢
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多