下面我们想模拟一个物体在2d屏幕上沿着一个方向(比如一个箭头sword)加速度行进。假设此方向的速度为moveSpeed,那么分别沿着x轴和y轴的速度就是

xSpeed = moveSpeed * Mathf.Cos ((sword.transform.eulerAngles.z+90)*Mathf.PI/180);

ySpeed = moveSpeed * Mathf.Sin ((sword.transform.eulerAngles.z+90)*Mathf.PI/180);

本身moveSpeed是有加速度的,假设此加速度为speed_a,那么在update函数中的实现是这样的

moveSpeed += speed_a * Time.deltaTime;//有加速度

那么此物体的位置变换函数就是

transform.position =transform.position + new Vector3 (xSpeed*Time.deltaTime,ySpeed*Time.deltaTime,0);

总的实现代码如此

moveSpeed += speed_a * Time.deltaTime;//有加速度
if(moveSpeed < 0){
	moveSpeed = 0;
	speed_a = 0;
	}
xSpeed = moveSpeed * Mathf.Cos ((sword.transform.eulerAngles.z+90)*Mathf.PI/180);
ySpeed = moveSpeed * Mathf.Sin ((sword.transform.eulerAngles.z+90)*Mathf.PI/180);
transform.position =transform.position + new Vector3 (xSpeed*Time.deltaTime,ySpeed*Time.deltaTime,0);

假设我们启动物体的函数如下

    void OnMove(Msg msgID, object msgParam){
        moveSpeed = 10;
        speed_a = 2;
        anim.SetBool ("isMoving",true);
        Debug.Log ("move...");
    }

假设我们停止物体的函数如下

    void OnStopMove(Msg msgID, object msgParam){
        isMoving = false;
        speed_a = -30;
        anim.SetBool ("isMoving",false);
        Debug.Log ("stop move...");
    }

 

posted on 2016-06-28 10:47  水榭阁主  阅读(3463)  评论(0编辑  收藏  举报