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)
经过一些研究和尝试,我没有找到一种方法来做我想做的事。
感谢您的帮助
宣布
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帮助我并花了很多时间试图找出解决方案。
归档时间: |
|
查看次数: |
4661 次 |
最近记录: |