首页 > 解决方案 > “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);
          }
       }
    }

标签: c#

解决方案


可能会尝试向球添加另一个球体对撞机,并使其成为触发器

那么这是一个改变的问题:

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);
     }
}

这应该让您朝着不同的方向迈出一步,希望这会有所帮助!干杯!


推荐阅读