相对于另一个游戏对象的位置、宽度和长度生成游戏对象



我目前正在Unity中使用C#开发一款游戏,遇到了一个小问题
我需要生成一个相对于另一个游戏对象的Spawnposition和长度的特定gameobjects
现在我认为bounds.size将是在这种情况下使用的最佳函数
如下所示,我首先声明在我的启动方法中使用它的变量:

public void Start()
{
GameObject PointBar = (GameObject) Resources.Load("PointBar Horizontal");
PointBarVectorLength = PointBar.GetComponent<BoxCollider2D>().bounds.size.x;
PointBarVectorConv = Camera.main.WorldToViewportPoint(new Vector2(PointBarVectorLength, 0f));
}

然而,有问题的gameobjects在start的调用时是不活动的,因此我认为在调用时不会返回bounds.size的任何值。

有人知道我如何访问bounds.size或等效的非活动gameobject吗?或者我这里还缺少什么吗?

如Collider.bounds属性文档中所述,bounds"如果碰撞器被禁用或者游戏对象不活动,则将是一个空的边界框";。所以你的假设非常正确。既然物体不存在于世界空间中,那就有意义了。

我不确定您的用例中最优雅的解决方案是什么,但我想到了两个选项。

  1. 通过访问对象的transform.localScale并考虑潜在父对象的比例来计算对象的派生维度。这可能会变得很混乱,但您也可以编写一个helper方法,使其更易于管理
  2. 加载对象后,将其实例化到屏幕外的某个位置,访问其Collider.bounds属性以获取所需信息,然后将其移动到所需位置或存储信息以备将来使用

可能有更好的解决方案,但这正是我脑海中浮现的。

我使用GetComponent((.bounds.size.x解决了这个问题;而不是BoxCollider。当游戏对象未处于活动状态时,可以访问此组件。

相关内容

  • 没有找到相关文章

最新更新