In Transformer2D.cs instead of:
var newLocalScale = Vector3.Lerp(transform.localScale, localScaleToGo, fraction);
// prevent recalculating colliders when no scale occurs
if (newLocalScale != transform.localScale) transform.localScale = lastLocalScale = newLocalScale;
there should be:
var newLocalScale = lastLocalScale = Vector3.Lerp(transform.localScale, localScaleToGo, fraction);
// prevent recalculating colliders when no scale occurs
if (newLocalScale != transform.localScale) transform.localScale = newLocalScale;
Otherwise the scaling will stop when it is "changed by someone else":
localScaleToGo is set to transform.localScale
- Then lerping equal
transform.localScale and localScaleToGo gives newLocalScale equal to them both.
- Then
lastLocalScale is not updated, as if (newLocalScale != transform.localScale) is always false.
- And then
if (!Mathf.Approximately(transform.localScale.x, lastLocalScale.x)) will always be true, the above algorithm will repeat again, and the lastLocalScale will never be updated (except for the very rare case when transform.localScale will occasionally become equal to the old lastLocalScale).
В Transformer2D.cs вместо:
var newLocalScale = Vector3.Lerp(transform.localScale, localScaleToGo, fraction);
// prevent recalculating colliders when no scale occurs
if (newLocalScale != transform.localScale) transform.localScale = lastLocalScale = newLocalScale;
должно быть:
var newLocalScale = lastLocalScale = Vector3.Lerp(transform.localScale, localScaleToGo, fraction);
// prevent recalculating colliders when no scale occurs
if (newLocalScale != transform.localScale) transform.localScale = newLocalScale;
Иначе скейл прекратится ровно в тот момент, когда будет изменен кем-то снаружи ("changed by someone else"):
localScaleToGoбуде установлен равным transform.localScale
- Затем лерпом между равными друг другу
transform.localScale иlocalScaleToGo будет получен newLocalScale равный им.
- И новый
lastLocalScale не будет установлен, так как if (newLocalScale != transform.localScale)всегда ложь.
- И далее проверка
if (!Mathf.Approximately(transform.localScale.x, lastLocalScale.x)) всегда будет срабатывать, все повторится c 1 пункта, и lastLocalScale так никогда и не изменится (кроме редкого случая, когда transform.localScale окажется равным старому lastLocalScale).
In
Transformer2D.csinstead of:there should be:
Otherwise the scaling will stop when it is "changed by someone else":
localScaleToGois set totransform.localScaletransform.localScaleandlocalScaleToGogivesnewLocalScaleequal to them both.lastLocalScaleis not updated, asif (newLocalScale != transform.localScale)is alwaysfalse.if (!Mathf.Approximately(transform.localScale.x, lastLocalScale.x))will always betrue, the above algorithm will repeat again, and thelastLocalScalewill never be updated (except for the very rare case whentransform.localScalewill occasionally become equal to the oldlastLocalScale).В
Transformer2D.csвместо:должно быть:
Иначе скейл прекратится ровно в тот момент, когда будет изменен кем-то снаружи ("changed by someone else"):
localScaleToGoбуде установлен равнымtransform.localScaletransform.localScaleиlocalScaleToGoбудет полученnewLocalScaleравный им.lastLocalScaleне будет установлен, так какif (newLocalScale != transform.localScale)всегда ложь.if (!Mathf.Approximately(transform.localScale.x, lastLocalScale.x))всегда будет срабатывать, все повторится c 1 пункта, иlastLocalScaleтак никогда и не изменится (кроме редкого случая, когдаtransform.localScaleокажется равным старомуlastLocalScale).