我有一個 1024x1024 像素的精靈,里面有一些透明區域。我正在使用 Sprite Renderer 在游戲場景中渲染它。當滑鼠懸停在滑鼠位置時,有什么方法可以檢查滑鼠位置的像素是否透明。
uj5u.com熱心網友回復:
我們可以投射射線并獲得我們生命點的世界位置,在這里我假設你SpriteRenderer
有一個對撞機。
private RaycastHit CastRay()
{
RaycastHit hit;
Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
Physics.Raycast(ray, out hit);
return hit;
}
然后我們需要一種方法將該世界空間轉換為紋理坐標
public Vector2 TextureSpaceCoord(Vector3 worldPos) {
float ppu = _sprite.pixelsPerUnit;
Vector2 localPos = transform.InverseTransformPoint(worldPos) * ppu;
var texSpacePivot = new Vector2(_sprite.rect.x, _sprite.rect.y) _sprite.pivot;
Vector2 texSpaceCoord = texSpacePivot localPos;
return texSpaceCoord;
}
一旦我們得到紋理坐標,我們就可以使用它GetPixel()
來Texture2D
獲取顏色
private void PickColor()
{
RaycastHit hit = CastRay();
if (hit.collider != null)
{
Vector2 coord = TextureSpaceCoord(hit.point);
Color selectedColor = _sprite.texture.GetPixel((int) coord.x, (int) coord.y);
// Here you can check if color is transparent
if(selectedColor == Color.clear){
// do stuff
}
}
}
你可以打電話給你PickColor()
_ Update()
__camera
Camera.main
_sprite
Sprite
SpriteRenderer
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/467345.html