- Home /
Question by
Carlos Santos · Nov 19, 2011 at 08:35 PM ·
animation2dtransformrigidbodies
Transform Rigidbody Animation
I need help to know if this is well coded.
I've done some code and it works, but i need to know if it is ok like this.
And the possible problem I'm seeing here is transform vs rigidbody.
The code below is a space ship controller for a 2d game, I'm moving the SpaceShipObject via physics. the rigid body as xyz rot locked and z pos also lock. But I'm applying rotation via animation, the animation only affect rotation values. Since I'm assuming that animations are transforms based and not physics, I'm wondering if my code if efficient.
By the way I'm not a programmer, I'm a graphic designer and sorry my English.
Hope to find help
Carlos Santos
and there's my code:
using UnityEngine;
using System.Collections;
public class playerMovementController : MonoBehaviour {
public float playerShipSpeed;
private float applyPlayerShipVerticalSpeed;
private float applyPlayerShipHorizontalSpeed;
// Use this for initialization
void Start () {
if (playerShipSpeed == 0) {
playerShipSpeed = 10;
}
}
// Update is called once per frame
void Update () {
// get input values from input and calculate forces to apply
applyPlayerShipVerticalSpeed = Input.GetAxis("Vertical") * playerShipSpeed;
applyPlayerShipHorizontalSpeed = -Input.GetAxis("Horizontal") * playerShipSpeed;
Animation anim;
anim = gameObject.GetComponentInChildren<Animation>();
//animate mesh
float axH = Input.GetAxis("Horizontal");
float aCFTime = 0.2f;
if(axH == 0.0f){
anim.CrossFade("playerShipNoRot",aCFTime);
}
else if(axH > 0.0f){
anim.CrossFade("playerShipRotR",aCFTime);
}
else if(axH < 0.0f){
anim.CrossFade("playerShipRotL",aCFTime);
}
}
void FixedUpdate(){
//apple forces to the player ship
//move left/right
rigidbody.AddForce (applyPlayerShipHorizontalSpeed, 0, 0);
//move front/back -- reduce back speed
switch(checkFBMov(applyPlayerShipVerticalSpeed)){
//move front
case 1:
rigidbody.AddForce(0,applyPlayerShipVerticalSpeed,0);
break;
//move back and reduce speed
case 2:
rigidbody.AddForce(0,applyPlayerShipVerticalSpeed / 1.7f ,0);
break;
}
}
//check if is moving front/back returns int
// 0 stop 1 front 2 back
private int checkFBMov(float force){
if(force == 0.0f){
return 0;
}
else if(force > 0.0f){
return 1;
}
else if(force < 0.0f){
return 2;
}
else{
return 3;
}
}
}
Comment