Unity向前移动时旋转

时间:2014-08-03 21:43:46

标签: c# rotation unity3d

我的2D游戏有以下代码,它使对象在屏幕上随机出现。我遇到的问题是,当一个物体看到它要去的点时,我希望它在向前移动时旋转。现在发生了什么,是它立即旋转到它正朝着的方向。那么,我怎样才能让它慢慢旋转并同时向前移动呢?

using UnityEngine;
using System.Collections;

public class Wonder : MonoBehaviour {

    protected Vector2 wayPoint;
    protected float speed;

    // Use this for initialization
    void Start () {
        speed = gameObject.GetComponent<Move>().playerSpeed;
        wonder();
    }

    void wonder(){
        wayPoint = Random.insideUnitCircle * 10;
    }

    // Update is called once per frame
    void Update () {
        Vector2 dir = wayPoint - new Vector2(transform.position.x, transform.position.y);
        float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(new Vector3(0, 0,Mathf.Atan2 (dir.y, dir.x) * Mathf.Rad2Deg - 90));
        transform.position = Vector2.MoveTowards(transform.position, wayPoint, Time.deltaTime * speed);
        float magnitude = (new Vector2(transform.position.x, transform.position.y) - wayPoint).magnitude;
        if(magnitude < 3){
            wonder();
        }
    }
}

以下是图片示例:

Ship Rotation

所以,一旦船到达目的地,另一个将被创建,它将移动到那里。我想我必须有一个5+点的列表,然后计算船需要增加新点的船长,因为船撞到了一个路点然后移除了旧点。我不知道如何做到这一点......

1 个答案:

答案 0 :(得分:0)

using UnityEngine;
using System.Collections;

public class Wander : MonoBehaviour {

    protected Vector3 velocity;
    protected Vector2 waypoint;
    protected float speed;

    // Use this for initialization
    void Start () {
        speed = gameObject.GetComponent<Move>().playerSpeed;
        RandomizeWaypoint();
    }

    void RandomizeWaypoint(){
        waypoint = Random.insideUnitCircle * 10;
    }

    // Update is called once per frame
    void Update () {
        transform.position = Vector3.SmoothDamp( transform.position, waypoint, ref velocity, Time.deltaTime * speed );
        transform.rotation = Quaternion.AngleAxis( Mathf.Atan2( velocity.y, velocity.x ) * Mathf.Rad2Deg, Vector3.forward );
        if( Vector3.Distance( transform.position, waypoint ) < 3 ){
            RandomizeWaypoint();
        }
    }
}

未测试。 Vector3.SmoothDamp可以非常方便。请注意拼写。

相关问题