【发布时间】:2016-08-17 23:01:52
【问题描述】:
所以在 Unity3D 中,我有一个由玩家控制的立方体(使用箭头)。玩家可以带着立方体去任何他想去的地方。问题是当我将刚体添加到立方体时,它就不再那么顺利了,不知何故,最后它只是出现了故障。尝试与torque 玩了一下,但这没有帮助,或者我还不清楚如何正确实现它。这是我用于多维数据集的代码(它是用 JavaScript 编写的)。任何帮助将不胜感激,即使您不知道 javascript,想法仍然很重要。谢谢你。代码:
private var ismoving : boolean = false;
private var startY : float = 0;
var cubeSpeed : float;
var cubeSize : float;
var jumpHeight = 3.0;
function Update ()
{
if (Input.GetKeyDown("up") && ismoving == false)
{
ismoving = true;
transform.Find("targetpoint").Translate(0, -cubeSize/2 , cubeSize/2);
StartCoroutine(DoRoll(transform.Find("targetpoint").position, Vector3.right, 90.0f,cubeSpeed));
}
if (Input.GetKeyDown("down") && ismoving == false)
{
ismoving = true;
transform.Find("targetpoint").Translate(0, -cubeSize/2, -cubeSize/2);
StartCoroutine(DoRoll(transform.Find("targetpoint").position, -Vector3.right, 90.0f,cubeSpeed));
}
if (Input.GetKeyDown("left") && ismoving == false)
{
ismoving = true;
transform.Find("targetpoint").Translate(-cubeSize/2, -cubeSize/2, 0);
StartCoroutine(DoRoll(transform.Find("targetpoint").position, Vector3.forward, 90.0,cubeSpeed));
}
if (Input.GetKeyDown("right") && ismoving == false)
{
ismoving = true;
transform.Find("targetpoint").Translate(cubeSize/2, -cubeSize/2, 0);
StartCoroutine(DoRoll(transform.Find("targetpoint").position, -Vector3.forward, 90.0f,cubeSpeed));
}
if (Input.GetKeyDown("space") && ismoving == false)
{
GetComponent.<Rigidbody>().AddForce(new Vector3(0, jumpHeight, 0), ForceMode.Impulse);
}
}
function DoRoll (aPoint, aAxis, aAngle, aDuration) {
var tSteps = Mathf.Ceil(aDuration * 30.0);
var tAngle = aAngle / tSteps;
var pos : Vector3;
for (var i = 1; i <= tSteps; i++)
{
transform.RotateAround (aPoint, aAxis, tAngle);
yield WaitForSeconds(0.0033333);
}
transform.Find("targetpoint").position = transform.position;
pos = transform.position;
pos.y = startY;
transform.position = pos;
var vec = transform.eulerAngles;
vec.x = Mathf.Round(vec.x / 90) * 90;
vec.y = Mathf.Round(vec.y / 90) * 90;
vec.z = Mathf.Round(vec.z / 90) * 90;
transform.eulerAngles = vec;
ismoving = false;
}
function FixedUpdate () {
}
【问题讨论】:
-
代码中有太多错误。 1. 使用 Javascript 而不是 C#。 2.不缓存变换(每次都使用.Find)。 3.不缓存刚体。请学习 C#。这并不难。
-
AndroidFreak,Unityscript 不再可用。您必须更改为 c#。
标签: javascript unity3d