真实的船/船移动和旋转(2d)

Owo*_*wow 5 2d unity-game-engine

我想将我的船移动到我点击的位置,但要进行真实的移动和旋转:

在此输入图像描述

http://i.imgur.com/Pk8DOYP.gif

这是我的代码(附加到我的船游戏对象):

基本上,当我单击某个地方时,它会移动船,直到到达我首先单击的点(我为您简化了我的代码)

using UnityEngine;
using System.Collections;


public class BoatMovement : MonoBehaviour {

    private Vector3 targetPosition;

    private float speed = 10f;
    private bool isMoving;


    void Update(){

        if (!isMoving && Input.GetMouseButton (0)) {

            targetPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
            isMoving = true;
        } 


        if (isMoving) {
            moveToPosition ();
        }
    }

    void  moveToPosition() {


        transform.position = Vector3.MoveTowards (transform.position, new Vector3(targetPosition.x, targetPosition.y, 0f), speed * Time.deltaTime);

        if (transform.position.x == targetPosition.x && transform.position.y == targetPosition.y) {
            isMoving = false;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

经过一些研究和尝试,我没有找到一种方法来做我想做的事。

感谢您的帮助

Owo*_*wow 0

宣布

    private Vector3 targetPosition;
    private float targetDistance;
Run Code Online (Sandbox Code Playgroud)

然后在移动开始时执行以下操作:

    targetPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
    targetDistance = Vector3.Distance(targetPosition, transform.position);
Run Code Online (Sandbox Code Playgroud)

移动时调用此:(例如在更新循环中)

    turnSpeed = 0.062f * targetDistance;
    moveSpeed = 35f * targetDistance;

    //Important /!\ : you need to add Linear drag on your rigidbody or it will keep adding
    RigidBody.AddForce(transform.up * moveSpeed * Time.deltaTime); 

    var newRotation = Quaternion.LookRotation (transform.position - targetPosition, Vector3.forward);
    newRotation.x = 0f;
    newRotation.y = 0f;
    transform.rotation = Quaternion.Slerp (transform.rotation, newRotation, Time.deltaTime * turnSpeed);
Run Code Online (Sandbox Code Playgroud)

最后,为刚体添加线性阻力值(1 即可)。

感谢maksymiuk帮助我并花了很多时间试图找出解决方案。