我正在从Swift SpriteKit背景中学到Unity,在该背景下,移动精灵的x位置与运行以下动作一样简单:
let moveLeft = SKAction.moveToX(self.frame.width/5, duration: 1.0) let delayAction = SKAction.waitForDuration(1.0) let handSequence = SKAction.sequence([delayAction, moveLeft]) sprite.runAction(handSequence)
我想知道一种在相同的持续时间(例如一秒钟)内将精灵移动到特定位置的等效或类似方法,而不必在更新函数中调用它。
gjttt1的答案很接近,但是缺少重要的功能,并且不能使用WaitForSeconds()来移动 GameObject 。您应该使用的组合Lerp,Coroutine和Time.deltaTime。您必须了解这些内容,才能从Unity中的脚本制作动画。
WaitForSeconds()
Lerp
Coroutine
Time.deltaTime
public GameObject objectectA; public GameObject objectectB; void Start() { StartCoroutine(moveToX(objectectA.transform, objectectB.transform.position, 1.0f)); } bool isMoving = false; IEnumerator moveToX(Transform fromPosition, Vector3 toPosition, float duration) { //Make sure there is only one instance of this function running if (isMoving) { yield break; ///exit if this is still running } isMoving = true; float counter = 0; //Get the current position of the object to be moved Vector3 startPos = fromPosition.position; while (counter < duration) { counter += Time.deltaTime; fromPosition.position = Vector3.Lerp(startPos, toPosition, counter / duration); yield return null; } isMoving = false; }
类似的问题:SKAction.scaleXTo