另一个对象上的统一对齐对象

时间:2018-10-22 07:54:16

标签: unity3d

我是团结的新手,我需要将对象作为子对象捕捉到另一个对象。

我有船体,船体有安装点和转塔。例如,如果我按... Num7,则船体将发生变化,安装对象也将发生变化,但是我需要转塔将其锁定在新船体上。如果我按Num4,则炮塔会发生变化,它也需要保持锁定状态。

基本上,我需要重新制作此应用程序,但现在我需要知道如何按对象名称或名称来捕捉对象。 https://youtu.be/6Kf-O6eJ4p8?t=634

1 个答案:

答案 0 :(得分:0)

在制作坦克预制件时,首先创建将容纳其余对象的空对象。它将成为其余对象的父对象。然后添加零件的对象。

卸下船体时,只需将其替换为另一个船体,并且由于转塔不是船体对象的子级,因此它不会受到影响,并且会像以前一样移动。

编辑1:澄清:每个对象都是一个单独的水箱(如果您不介意的话,我将其称为水箱)。因为您的问题最初没有提到修改,所以我将相应地更新我的答案。每个战车将按层次结构容纳1个船体,1个炮塔和4个炮塔模组。

因此,您应该做的是:

  1. 在场景中创建空对象,将其称为“坦克”;
  2. 将脚本添加为组件,将其称为Tank;
  3. 此脚本将子类化MonoBehaviour;
  4. 在脚本中添加“船体”,“炮塔”和“ Mods”属性,这些属性是“游戏对象”属性,但“ Mods”是“游戏对象列表”。
  5. 将一个Hull游戏对象(假设您已经拥有)添加到Tank Game对象。确保正确放置。将Turret GO添加为Hull的子级,将Modified GO添加为Turret的子级。
  6. 每个船体,炮塔和改装件都应附加脚本。
  7. 外壳脚本应具有Position类型的snappingPosition属性。炮塔应该有一个名为snappingPositions的位置列表。
  8. 正确放置对象后,请注意其变换组件。每个对象的“变换位置”的值对您来说都很重要,因为如果每个船体的高度或对齐方式不同,则捕捉点的位置也将不同。您要做的是为Hull脚本中的每个Hull游戏对象保存该捕捉点。因此,继续将炮塔的位置另存为船体的捕捉点,并将Mods的位置另存为炮塔的snappingPoints。
  9. 在与当前Hull的捕捉点相同的位置处替换另一个炮塔,并正确对齐修改。将修改位置保存为该炮塔的捕捉点。
  10. 对所有炮塔重复9,直到完成。
  11. 替换船体对象并正确对齐转塔。将炮塔的位置另存为赫尔的snappingPosition。对所有3个船体重复以上操作。

现在,每次在编辑时切换船体/炮塔/修改时,只需更换炮塔,使用SetParent(其Transform组件的?)转移所有修改,将其位置调整为炮塔脚本中的捕捉位置,然后调整炮塔的位置锁定船体脚本的位置并摧毁旧炮塔。

编辑2:我现在了解到这是经过修改的船体,而不是炮塔。因此,Hull应该将Mod位置保存为modsSnappingPoints属性。并且,当您更改船体时,会将所有mod移至新的船体,更新位置,移动炮塔,更新位置,然后删除旧船体。