我正在从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)
Run Code Online (Sandbox Code Playgroud)
我想知道一种等效或类似的方法,将精灵移动到特定持续时间(例如,一秒)的特定位置,并且延迟不必在更新函数中调用.
我已经编写了以下方法来在一段持续时间内以任意角度围绕另一个任意点旋转任意点.这个问题现在变得不规律,但最终我认为是理想的目的地.我需要让它顺利地移动到角度.
请注意,这些点与游戏对象无关.
从下图中,我试图LineRenderer在给定的时间段内将一个贝塞尔曲线的一个点(用a绘制)绕另一个点移动一个角度.这些点中没有一个与包含贝塞尔曲线的游戏对象的位置一致.
IEnumerator runMovement() {
yield return new WaitForSeconds(2.0f);
Vector2 pivot = points[3];
StartCoroutine(RotateControlPointWithDuration(pivot, 2.0f, 90.0f));
}
IEnumerator RotateControlPointWithDuration(Vector2 pivot, float duration, float angle)
{
float currentTime = 0.0f;
float ourTimeDelta = 0;
Vector2 startPos = points[0];
ourTimeDelta = Time.deltaTime;
float angleDelta = angle / duration; //how many degress to rotate in one second
while (currentTime < duration)
{
currentTime += Time.deltaTime;
ourTimeDelta = Time.deltaTime;
points[0] = new Vector2(Mathf.Cos(angleDelta * ourTimeDelta) * (startPos.x - pivot.x) - Mathf.Sin(angleDelta …Run Code Online (Sandbox Code Playgroud) 我想在 Y 轴上在 90,-90 之间来回旋转对象。问题是我可以将编辑器中的对象设置为 -90,但是当我运行项目时 -90 突然变为 270。无论如何这里是我正在使用的代码:
void Update()
{
if (transform.eulerAngles.y >= 270)
{
transform.Rotate(Vector3.up * speed * Time.deltaTime);
}
else if (transform.eulerAngles.y <= 90)
{
transform.Rotate(Vector3.up * -speed * Time.deltaTime);
}
}
Run Code Online (Sandbox Code Playgroud)
它总是卡在 360 度左右的中间。帮助?
我正试图制作一个像Unity一样旋转的跷跷板,由于某种原因旋转是瞬间的,而不是一个渐进的运动.我之前曾调查过Slerp和Lerp,但我也无法使用它.我想知道是否有人有任何见解,因为我确信我错过了一些愚蠢而且简单的xD.谢谢!这是方法.
private void Rotate(float rotateAmount)
{
var oldRotation = transform.rotation;
transform.Rotate(0, 0, rotateAmount);
var newRotation = transform.rotation;
for (float t = 0; t <= 1.0; t += Time.deltaTime)
{
transform.rotation = Quaternion.Slerp(oldRotation, newRotation, t);
}
transform.rotation = newRotation;
}
}Run Code Online (Sandbox Code Playgroud)
我统一制作了一个测试游戏,当我单击按钮时,它会生成一个从工厂类创建的圆柱体。我试图做到这一点,以便当我创建圆柱体时,它的高度会在接下来的 20 秒内缩小。我发现的一些方法很难转化为我正在做的事情。如果您能引导我走向正确的方向,我将非常感激。
这是我的圆柱体类代码
public class Cylinder : Shape
{
public Cylinder()
{
GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
cylinder.transform.position = new Vector3(3, 0, 0);
cylinder.transform.localScale = new Vector3(1.0f, Random.Range(1, 2)-1*Time.deltaTime, 1.0f);
cylinder.GetComponent<MeshRenderer>().material.color = Random.ColorHSV();
Destroy(cylinder, 30.0f);
}
}
Run Code Online (Sandbox Code Playgroud)