我有一个位于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
答案 0 :(得分:0)
我认为最终答案是因为你的物质材料。由于摩擦力太低,立方体只是滑过该区域。您可以通过以下两种方式解决这个问题,如果您将材料取下它所附着的任何材料,或者如果您在Rigidbody&gt;下的检查器中冻结立方体的旋转。约束&gt;冻结旋转。第二个选项不会阻止您的代码工作。
希望这有帮助!
答案 1 :(得分:0)
我和一个有对撞机的孩子与父母相交的孩子一样 对撞机所有约束均已冻结,但仍保持微小移动,如-0.002 ... 我丑陋的“解决方案”: transform.localRotation =四元数.identity;在Update()中!