如何在Unity中反映游戏对象的运动?

时间:2019-03-09 15:28:50

标签: c# visual-studio unity3d position mirror

我有两个游戏对象,我希望将它们放在屁股上,就像在图片中一样,但是我希望它们一起移动和旋转,以便始终将它们放置成那样。我正在控制黑色对象,因此我只使用transform.rotation = Quaternion.Euler(0, 0, player.transform.eulerAngles.z + 180);来获得正确的旋转,但是我无法正确地获得位置。这是我要如何放置它们的草图。Visual explanation of the positions

在向某个方向移动我的黑色对象时,两个游戏对象不会保持连接状态。这是问题的表示。Problem

这是您的确切脚本和照片: 我用于移动ai的脚本:

transform.position = player.transform.position + new Vector3(0, player.transform.localScale.y + transform.localScale.y - 1, 0); transform.rotation = Quaternion.Euler(0, 0, player.transform.eulerAngles.z + 180); transform.parent = player.transform;

以及检查员中的确切照片:enter image description here

这就是我希望它们始终放置的方式:https://bugguide.net/images/cache/SL2/ZZL/SL2ZZLPZMLOH6HHRUHRREHVH7HVHZLWZLL6Z7H6Z8H5Z7HEZ5LEZ5H8ZSLAHRL2Z4LBZ7LAZILAZXLGZKL2ZMHAHMH.jpg

[更新]我使用了@Ali Kanat的答案,我已经中途了:Update 正如您在图片中看到的那样,这两个错误现在彼此重叠,但是它们正在按照应有的方式移动。

1 个答案:

答案 0 :(得分:0)

您可以仅使红色对象(或您拥有的任何其他对象)成为黑色对象的子对象并旋转黑色对象。这样,您可以保留几何图形,而不必修改其他对象的transform组件。

在评论之后,我假设最大的错误是Player。要以编程方式实现您想要的目标,可以像这样:

//forward, up or right depends on which direction is the front of your player
transform.position = player.transform.position + ((-player.transform.forward) * (player.transform.localScale.y
        + transform.localScale.y)/2);
transform.forward = (-player.transform.forward);

因为您要实现的是找到在播放器后方方向上(PlayersizeY +敌人SizeY)的位置。无论您的播放器方向是什么,这都将起作用。