c# - “oncollisionenter”中的 Rigidbody.Addforce 未在统一 c# 中执行
问题描述
当我试图制作一个游戏时,当球员与球碰撞时球员踢球并且当我按下 Q 但它不起作用并且没有显示任何错误
public Rigidbody rg;
void OnCollisionEnter(Collision col)
{
if(col.gameObject.name=="ball")
{
if(Input.GetKeyDown(KeyCode.Q))
{
rg.AddForce(100,0,0);
}
}
}
解决方案
可能会尝试向球添加另一个球体对撞机,并使其成为触发器
那么这是一个改变的问题:
public Rigidbody rg;
void OnCollisionEnter(Collision col)
{
if(col.gameObject.name=="ball")
{
if(Input.GetKeyDown(KeyCode.Q))
{
rg.AddForce(100,0,0);
}
}
}
至 :
public Rigidbody rg;
void OnTriggerEnter(Collision col)
{
if(col.gameObject.name=="ball")
{
if(Input.GetKeyDown(KeyCode.Q))
{
rg.AddForce(100,0,0);
}
}
}
这个想法是统一的碰撞是挑剔的,所以你最好的选择是有一个更大的触发器来检测球员是否在球的范围内
旁注:我猜这是在你的球员身上,所以也许你也可以试试这个:记住“if”语句只是为了防止球对象有不同的扩展名,或者可能是“球(克隆)“ ETC。
Rigidbody rb;
void Start(){
rb = gameObject.GetComponent<Rigidbody>();
}
void OnTriggerEnter(Collision col){
if(col.gameObject.name.ToString().Contains("ball") &&
Input.GetkeyDown(KeyCode.Q))
{
//here you can add force to the player, or to the ball
// for the player :
rb.AddForce(100,0,0);
// for the ball
col.GetComponent<Rigidbody>().AddForce(100,0,0);
}
}
这应该让您朝着不同的方向迈出一步,希望这会有所帮助!干杯!
推荐阅读
- eloquent - 带有急切加载的orderby,laravel
- javascript - 在 aws 中使用临时凭证获取“您提供的 AWS 访问密钥 ID 在我们的记录中不存在”
- r - RRF 模型为测试集提供 NA
- java - 在 REST 和休眠中检索详细信息时出现 406 错误
- node.js - 如何使用 Electron 在 linux 中处理自定义协议?
- javascript - JavaScript 时钟字体大小
- c# - 使用相对路径复制文件
- php - 如何从两端对 PHP 网站进行负载测试
- vba - 用于检查生产件是否大于 104% 的 Vba 代码
- sql - 如何获取一个月的最后一个日期,但在 SQL Server 中隐藏星期日和星期六