c# - 让物体以匀速滑行到鼠标 Unity C#
问题描述
我有一个子弹对象,它需要在按下鼠标时滑向鼠标(但在释放时应该停止)。我尝试了多种方法,但每次子弹加速时,都会以椭圆形围绕鼠标转圈(我也有重力)。我怎样才能让它以恒定的速度向鼠标移动?
这是我的代码:
using UnityEngine;
public class Bullet : MonoBehaviour {
public Rigidbody rigidbody;
void Start() {
rigidbody = GetComponent<Rigidbody>();
rigidbody.useGravity = false;
rigidbody.velocity = new Vector3(0, -0.3F, 0);
}
float getX(Vector3 transform_pos, Vector3 mouse_pos) {
float tx = transform_pos.x;
float mx = mouse_pos.x;
if (tx == mx) { return 0;
} else if (tx > mx) { return -1;
} else if (tx < mx ) { return 1;
}else { return 0; }
}
void Update() {
if (Input.GetMouseButton(0)) {
Vector3 mouse_pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
transform.LookAt(mouse_pos);
float x = getX(transform.position, mouse_pos);
float y = transform.position.y > mouse_pos.y ? -0.03F : 0.03F;
rigidbody.AddForce(new Vector3(x, 0, transform.position.z), ForceMode.VelocityChange);
Debug.Log(x.ToString() + y.ToString());
}
if (transform.position.y < -5 | transform.position.y > 5) {
Destroy(transform.gameObject);
}
rigidbody.AddForce(Vector3.down, ForceMode.Force);
}
}
解决方案
我尝试了更多,发现 usingrigidbody.velocity()
比 更好rigidbody.AddForce()
,所以替换rigidbody.AddForce(new Vector3(x, 0, transform.position.z), ForceMode.VelocityChange);
为rigidbody.velocity = new Vector3(x, y, transform.position.z);
(替换x
和y
速度,它应该可以工作。请注意,这会替换速度,所以所有的运动都将停止)
推荐阅读
- sql - 加入表格的最佳方法是什么
- java - 解析 2.000,00 到 2000 和 2.000,15 到 2000.15
- javascript - ResizeObserver 在 Edge 和 Firefox for Android 中不起作用
- node.js - 如何导入airbnbapi?
- javascript - 使用 Jest 在 Node-RED 中对自定义节点进行单元测试时出现 setTimeout 错误
- spring - REST 端点与常规浏览器端点
- java - 为什么我收到 Spring Security 和 Keycloak 的“访问被拒绝”错误?
- node.js - 我的 Dialogflow + Firebase 机器人不会从 Bigquery 中提取数据
- android - Kotlin 协程中的 Dispatchers.Main 和 Dispatchers.Default 有什么区别?
- yii - 在 yii-framework 中添加公共可访问文件的文件夹是什么?