如何使用unity3d 4.5中的精灵渲染器组件获取2D gamobject的高度?

如何使用unity3d 4.5中的精灵渲染器组件获取2D gamobject的高度?,unity3d,height,size,2d,sprite,Unity3d,Height,Size,2d,Sprite,我有一个2D游戏对象,我想知道我的游戏对象在每个屏幕大小中的高度 我通过计算两个空游戏对象之间的距离来计算游戏角色的高度,但我发现这是错误的 有更好的方法吗?Unity中单位精灵的默认大小(px)为100。如果选择精灵,可以在检查器中找到“像素到单位”字段 假设你的物体大小正常,所以x和y等于1.0。通常你会给你的对象一个2d碰撞器;此示例中的Box 2D碰撞器。您将注意到碰撞器的默认大小不等于1.0。它的边界基于我前面提到的像素到单位的值。在本例中,让我们有一个尺寸为128 x 128的精灵。

我有一个2D游戏对象,我想知道我的游戏对象在每个屏幕大小中的高度

我通过计算两个空游戏对象之间的距离来计算游戏角色的高度,但我发现这是错误的

有更好的方法吗?

Unity中单位精灵的默认大小(px)为100。如果选择精灵,可以在检查器中找到“像素到单位”字段

假设你的物体大小正常,所以x和y等于1.0。通常你会给你的对象一个2d碰撞器;此示例中的Box 2D碰撞器。您将注意到碰撞器的默认大小不等于1.0。它的边界基于我前面提到的像素到单位的值。在本例中,让我们有一个尺寸为128 x 128的精灵。碰撞器的边界现在等于1.28,因为100px等于1.0单位(128/100=1.28)

现在我们可以通过将物体的宽度除以对撞机的边界来很容易地计算屏幕上的像素大小:1.0/1.28=0.78125 现在,只需将像素乘以单位值(100):0.78125*100=78.125px

代码方面,它可能如下所示:

void OnMouseOver() {
    Vector2 objDimensionInPX = GetDimensionInPX(GameObject.FindWithTag("Player"));

    Debug.Log ("Sprite / GameObject size in pixels is (Width x Height): " + objDimensionInPX.x + " x " + objDimensionInPX.y);

}

private Vector2 GetDimensionInPX(GameObject obj) {
    Vector2 tmpDimension;

    tmpDimension.x = obj.transform.localScale.x / obj.GetComponent<SpriteRenderer>().sprite.bounds.size.x;  // this is gonna be our width
    tmpDimension.y = obj.transform.localScale.y / obj.GetComponent<SpriteRenderer>().sprite.bounds.size.y;  // this is gonna be our height

    return tmpDimension;
}
void OnMouseOver(){
Vector2 objDimensionInPX=GetDimensionInPX(GameObject.FindWithTag(“Player”);
Log(“精灵/游戏对象的像素大小为(宽度x高度):”+objDimensionInPX.x+“x”+objDimensionInPX.y);
}
私有向量2 GetDimensionInPX(游戏对象对象obj){
向量2 TMP维度;
tmpDimension.x=obj.transform.localScale.x/obj.GetComponent().sprite.bounds.size.x;//这将是我们的宽度
tmpDimension.y=obj.transform.localScale.y/obj.GetComponent().sprite.bounds.size.y;//这将是我们的高度
返回tmpDimension;
}

使用
GetComponent().bounds中包含的变量:我不清楚它们到底是什么,但对于所有屏幕大小,最小值和最大值都是相同的,我一直在使用renderer.bounds.size.y,但它们都是相同的,边界内的变量对于任何屏幕大小都是相同的,是的,然后使用Camera.WorldToScreenPoint将您需要的内容转换为屏幕坐标:非常感谢!我可以再问一个问题吗?摄影机、渲染器、边界、大小、y返回的确切值是多少?(我知道它是我物体的高度)我是说它是像素还是别的什么?因为我觉得屏幕上物体的大小太大了!如果我的英语不好,很抱歉!它实际上应该是相乘而不是相除tmpDimension.x=obj.transform.localScale.x*obj.GetComponent().sprite.bounds.size.x;//这将是我们的宽度在我的例子中,它返回一个没有x和y属性的边界,所有其他值都设置为0。如果对象旋转,这些将返回不正确的值。