【发布时间】:2018-04-19 01:00:19
【问题描述】:
我在0, 1 ,0 放置了一个立方体,并且在测试后启动程序后,我发现刚体的重力导致我的立方体在程序中实际上没有移动时不断地围绕坐标移动。
我可能完全没有点击,它会说它正在移动 +-5 个单位。它在一个完全平坦的表面上。我已经超越了困惑。 http://prntscr.com/j75fed
我可以确认它从0, 0, 0开始
using System.Collections;
using UnityEngine;
public class TumblingCubes : MonoBehaviour
{
public float tumblingDuration = 0.2f;
void Update()
{
var dir = Vector3.zero;
if (Input.GetKey(KeyCode.UpArrow))
dir = Vector3.forward;
if (Input.GetKey(KeyCode.DownArrow))
dir = Vector3.back;
if (Input.GetKey(KeyCode.LeftArrow))
dir = Vector3.left;
if (Input.GetKey(KeyCode.RightArrow))
dir = Vector3.right;
if (dir != Vector3.zero && !isTumbling)
{
StartCoroutine(Tumble(dir));
}
var vec = transform.eulerAngles;
transform.eulerAngles = vec;
}
bool isTumbling = false;
IEnumerator Tumble(Vector3 direction)
{
var vec = transform.eulerAngles;
transform.eulerAngles = vec;
isTumbling = true;
var rotAxis = Vector3.Cross(Vector3.up, direction);
var pivot = (transform.position + Vector3.down * 0.5f) + direction * 0.5f;
var startRotation = transform.rotation;
var endRotation = Quaternion.AngleAxis(90, rotAxis) * startRotation;
var startPosition = transform.position;
var endPosition = transform.position + direction;
var rotSpeed = 90 / tumblingDuration;
var t = 0.0f;
while (t < tumblingDuration)
{
t += Time.deltaTime;
transform.RotateAround(pivot, rotAxis, rotSpeed * Time.deltaTime);
yield return null;
}
transform.rotation = endRotation;
transform.position = endPosition;
isTumbling = false;
}
}
这是附加到立方体的唯一脚本,除了刚体
禁用脚本后,这就是你的结果,???奇怪的坐标http://prntscr.com/j75htl
【问题讨论】:
-
这与 c# 有什么关系?提示:不是。您将在 Unity 论坛上获得更好的答案,这是用于编程问答
-
我只能假设它与您的脚本有关,您可以在您的问题中添加任何相关的脚本吗?有什么东西可以移动立方体?
-
@NyW,我现在更新不好
-
你的脚本没有问题,我只是做了一个例子来测试它,它工作正常。唯一的区别是我对立方体失去了重力。还有什么可能影响立方体的吗?
-
@nyw 是的,你是对的,当我关闭重力时,它确实有效。但我需要它,因为立方体需要工作重力才能从孔中掉下来。当你开启重力时你会得到什么?
标签: c# unity3d gameobject