littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

Unityで特定の点を中心にScaleを変化させる (ScaleAround)

UnityでGameObjectの原点ではなく、指定した点を中心にScaleを変更する方法。

rotationは原点と回転軸を指定して回転できる RotateAround があるけど、Scaleには無いので作った。

タッチパネルの2本指操作や、両手VRコントローラで拡大させる時に、拡大の中心を動的に変更できて便利。

/// pivot を中心に、target のScaleを変化させる
public void ScaleAround(GameObject target, Vector3 pivot, Vector3 newScale)
{
    Vector3 targetPos = target.transform.localPosition;
    Vector3 diff = targetPos - pivot;
    float relativeScale = newScale.x / target.transform.localScale.x;

    Vector3 resultPos = pivot + diff * relativeScale; 
    target.transform.localScale = newScale;
    target.transform.localPosition = resultPos;
}

実際は、Transformの原点で拡大するんだけど、動的に位置を補正している。