c# - 即使碰撞有效,rb.addforce 也没有响应
问题描述
你好吗?我正在研究一种简单的击退机制,如果我的角色与“敌人”这个名字发生冲突,则被解释为 (rb) 的玩家刚体会增加“后退”的力量。
这是我的代码,请参考我用星号列出的地方。
公共类移动:MonoBehaviour {
public float speed;
private Rigidbody rb;
public int health;
private float knockback;
// Use this for initialization
void Start()
{
rb = GetComponent<Rigidbody>();
knockback = 2f;
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.name == "enemy")
{
health = health - 20; //**this works**
rb.AddRelativeForce(Vector3.forward * knockback); //**but this doesnt :c **
}
}
void death()
{
if (health <= 0)
{
print("i died");
}
}
void playerWalk()
{
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 75f;
var z = Input.GetAxis("Vertical") * Time.deltaTime * 5f;
transform.Rotate(0, x, 0);
transform.Translate(0, 0, z);
}
void Update()
{
death();
playerWalk();
}
}
问题是您可能已经猜到了,我的触发器不起作用。我的健康=健康-20;线路有效,但我的 rb.addforce 没有。
这里可能是什么问题?谢谢 :)
编辑2#
只想编辑这个并说我已经解决了问题。问题是我的浮点值不够高 xD
解决方案
在您编写代码段时,“rb”不是一个字段,而是“Start”方法中的一个局部变量。如果您在指定行中遇到异常,可能是因为这个。如果您希望 'rb' 成为一个字段,所有类方法都可以访问,则需要在类主体中声明它,如下所示:
public int health;
private float knockback;
private RigidBody rb;
// (...) the rest of your code
如果不是这种情况,请告诉我并向我们提供有关您的问题的更多信息。
推荐阅读
- elasticsearch - 我们可以在 AfterSaveCallback 事件回调中更新索引文档吗
- sql-server - SQL Server 分母被推到零
- node.js - Mongoose Schemme 未验证
- powershell - 当在PowerShell中调整窗口大小时,具有背景颜色的Write-Host会用背景颜色填充整行
- shell - 如何在Shell中获取另一个字符串中的字符串的行号
- python - 如何从 sys.stdin 读取单词并过滤以“iary”结尾的单词
- tableau-api - 如何在画面的并排条形图中添加单个统一趋势线
- python - 在 Python 中计算 p 值
- python - 如何在 Flask-Restx 中返回嵌套的 json 响应
- django - 使用可变数量的关键字优化 django 中搜索过滤器的函数代码 - 代码太多,我是初学者