unity3d - 我的 AddForce 方法不起作用或推动 Rigidbody2D
问题描述
这是我的第一个问题,我是游戏开发的新手,所以如果有点愚蠢,请不要强硬。
我的问题是我在敌人脚本上检测到我的敌人和我的玩家之间的碰撞,我希望它将玩家向后推回碰撞点。
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Player")
{
float force = 200f;
Vector3 dir = (Vector3)collision.contacts[0].point - transform.position;
dir = -dir.normalized;
collision.gameObject.GetComponent<Rigidbody2D>().velocity += (Vector2)dir * force;
Debug.Log("Collided");
}
}
一旦它发生碰撞,我会在控制台上获得 debug.log 信息。但是没有任何力量施加在它上面。
我也尝试使用 AddForce 方法,但它都不起作用。
我有点卡在代码上,但我希望其他人可以帮助我找出问题所在。
解决方案
我的猜测是您在全局空间中添加了速度,但您使用的碰撞点在本地空间中。我的解决方案是使用以下公式来计算方向。
Vector3 dir = collision.transform.position - transform.position;
dir = dir.normalized;
因为这里我使用两个对象的位置(即全局)来计算方向向量,所以我的结果也会在全局空间中。
我的建议是,你总是在什么空间(相对于对象或相对于世界原点)思考你使用的坐标。我希望这能解决你的问题。
推荐阅读
- vue.js - 如何构建 vuejs 动态组件?
- python - 根据另一列的条件计算价格变化和价格的累积百分比变化
- python - Keras自动编码器的输入和输出层不匹配,无法运行模型
- php - 试图在laravel中获取非对象问题的属性
- scala - 为什么我在 Spark 中使用 combineByKey 的字数是值总和的两倍?
- javascript - DataTable 列过滤不提取值
- windows - 如何在启动时停止出现命令提示符?
- jbase - 在jbase中找到死代码的好方法是什么?
- python - 如何在 python 中替换 dict 中的字符
- java - 无法解析 commons-collections:commons-collections:2.1