Donc, dans Unity3D, j'ai un cube qui est contrôlé par un joueur (en utilisant des flèches). Le joueur peut aller où il veut avec le cube. Le problème est quand j'ajoute un corps rigide au cube alors ça ne va plus vraiment aussi bien, à la fin ça pète. J'ai essayé de jouer un peu avec torque
, mais cela n'a pas aidé ou je ne comprends pas encore clairement comment l'implémenter correctement. C'est le code que j'utilise pour le cube (il est écrit en JavaScript). Toute aide sera appréciée, même si vous ne connaissez pas le javascript, une idée compte encore. Je vous remercie. Code:Rouler un cube rigide dans Unity3D
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() {
}
Trop de mauvaises choses dans votre code. 1. Utiliser Javascript au lieu de C#. 2. Pas de mise en cache transformer (à l'aide de .Find à chaque fois). 3. Ne pas mettre en cache Rigibody. S'il vous plaît apprendre C#. C'est pas difficile. – Programmer
AndroidFreak, Unityscript n'est plus disponible. Vous devez changer pour C#. – Fattie