我有一个边框来判断选择了哪个角色,我想在用户点击特定角色头像时移动它,我认为做一个平滑移动的选择边框将是整洁的效果。这是看起来像:
所以我使用以下脚本来移动虚线边框
public class SelectCharacter : MonoBehaviour, IInputBehavior {
[SerializeField]
private Character character;
private IEnumerator moveLocalPosOverSeconds(GameObject obj, Vector3 end, float seconds)
{
float elapsedTime = 0;
Vector3 start = obj.transform.localPosition;
while(elapsedTime < seconds)
{
obj.transform.localPosition = Vector3.Lerp(start, end, (elapsedTime / seconds));
elapsedTime += Time.deltaTime;
yield return new WaitForEndOfFrame();
}
// hope this will ajust the dashed box to precise postion
transform.localPosition = end;
}
public void OnClick()
{
GameObject selectBorder = transform.parent.Find("SelectBorder").gameObject;
Vector3 newLocalPos = new Vector3(transform.localPosition.x, selectBorder.transform.localPosition.y, selectBorder.transform.localPosition.z);
Debug.Log("localPos is :" + newLocalPos);
StartCoroutine(moveLocalPosOverSeconds(selectBorder, newLocalPos, 0.2f));
SceneController.instance.ChangeCharacterTo(character);
}
}
似乎边界的位置不会达到所需的精确位置,我知道随着时间的推移Lerp
可能会出现一些精确的位置,因此添加transform.localPosition = end;
以保持调整while
块之后的位置。但它不会起作用。
我仔细检查控制台的日志和检查员中虚线框的位置,它只是不会在准确的位置结束。
有一段时间会发生这种情况:
如果我好运,这似乎很好:
但在检查员:
x值应精确为0.9而不是0.88 ......
我做错了什么?