簡體   English   中英

為什么我的射線廣播有時會檢測到命中,而有時卻找不到?

[英]Why does my raycast sometimes does detect a hit and sometimes wont?

我有一顆子彈,在剛體上裝有脈沖。 然后,每幀我都以子彈的速度向前廣播,有時可以,有時找不到敵人。 當我逐幀跳過游戲時,我可以清楚地看到我的調試射線廣播在敵人的(boc)對撞機內部,但仍然找不到。 我非常確定它不會僅僅越過敵人,在編輯器中,我可以清楚地看到對撞機內部的綠色射線。

有什么建議么? 我也嘗試了一個在線廣播,我在這里找到了,但是給出了相同的結果。 (該線在完全相同的位置,並且還在對撞機內繪制調試線。正如我所說,這些層也是正確的,有時會,有時也找不到目標...

void Update()
{
  //get direction and distance
  Vector3 direction = _rigidBody.velocity.normalized;
  float distance = (_rigidBody.velocity.magnitude * Time.deltaTime);

  //raycast for targets
  RaycastHit raycast;
  if (Physics.Raycast(transform.position, direction, out raycast, distance, HitLayerMask))
  {
    Debug.DrawRay(transform.position, direction, Color.red);
  } 
  else
  {
    Debug.DrawRay(transform.position, direction, Color.green);
  }
}

您可以看到微小的調試射線,也可以從側面觀察對撞機。 從正面看,它也幾乎位於中間。 我在想這可能是因為光線投射的開始和結束都在boxcollider內部嗎?

編輯器截圖

剛體被移動

//Speed = 500 in this case, but lowering doesn't change anything
rigidBody.AddRelativeForce(Vector3.forward * Speed, ForceMode.Impulse);

更新:

經過更多的調試和測試后,我發現它發生是因為您不會從對撞機內部受到打擊。 這是發生了什么:

  • 子彈不在目標對撞機的外面,但是雷聲廣播很短就可以找到它。

  • 子彈向前移動,敵人也向前移動(彼此靠近)。 子彈現在在​​對撞機內

  • raycast不會找到敵人,因為那只是raycast的工作方式

我能做的是使光線投射的距離更遠,但又不要太遠,以至於導致怪異的點擊,從圖形上看起來很奇怪。

我以為使用

float distance = (_rigidBody.velocity.magnitude * Time.deltaTime);

就足夠了(因為那是子彈到上一幀以來的移動距離,但是因為敵人也移動了,所以上面的事情可能發生。嗯,如果敵人不動就足夠了:/

一種可能的解決方案是轉到Project Settings -> Script execution order ,並將項目符號的MonoBehavior放在默認時間之后。 這樣,在進行射線投射之前,其他所有東西都已經完成移動。 hacky解決方案,但應該可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM