我有兩個模型
模型a:一個Cube,添加了剛體、碰撞體,并用剛體移動的
模型b:一個椅子,只添加了剛體,沒有腳本控制的
然后我控制模型a去撞模型b的時候出現了兩種情況
第一種情況是我以一個慢的速度去撞模型b,模型a沒有穿透模型b的椅子腿中間的空隙
第二種情況是我以一個快的速度去撞模型b,模型a穿透了模型b的椅子腿中間的空隙
我不知道為什么會出現這兩種情況,因為按理來說模型a不該穿透模型b啊,我查了半天都沒有結果,看到了一個什么過速穿越,也不知道是不是我這個問題的答案,所以請大佬們指教一下唄
另外補充一下:模型b是我用Cube拼出來的所以他的碰撞體不是一個大的立方體
uj5u.com熱心網友回復:
Rigidbody有一個屬性“Collision Detection”(碰撞檢測)。Discrete(離散檢測):當物體這一幀還在前面,下一幀就到后面去了,就檢測不到,不適用于高速運動的物體
Continuous(連續檢測):防止物件穿過所有靜態碰撞體
Continuous Dynamic(動態連續檢測):防止物件穿過所有靜態碰撞體以及設定為Continuous或Continuous Dynamic的剛體。
移動速度過快時,容易出現上一幀在物體B前面,下一幀在物體B后面,物體碰撞沒有起到效果。
uj5u.com熱心網友回復:
大佬,我把那個屬性改了也沒用啊,還是穿過靜態碰撞體啦


這是代碼,大佬你看看吧,真的是很迷惑啊
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class movetxte : MonoBehaviour {
Rigidbody _rigidbody;
Transform _transform;
void Start () {
_rigidbody= gameObject.GetComponent<Rigidbody>();
_transform = gameObject.GetComponent<Transform>();
}
void Update () {
if (Input.GetKeyDown(KeyCode.W))
{
_rigidbody.MovePosition(transform.position + Vector3.forward);
}
}
}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
嚶嚶嚶
沒大佬回答一下嗎uj5u.com熱心網友回復:
抱歉,剛剛才看到。碰撞和被碰撞的物件都需要有 BoxCollider 、 Rigidbody 這兩個組件。
檢查一下你的BoxCollider設定,IsTrigger如果被勾選了就不會有碰撞效果了。

我直接復制了你的代碼,效果是正常的。(不需要勾選Static)
uj5u.com熱心網友回復:
小提醒如果另一個物件不需要運動,像是墻壁、桌子等...
是不需要RigidBody(鋼體)
Collider(碰撞體)+RigidBody(鋼體)能觸碰到Collider(碰撞體)
另外如果兩個物體 一個物體常做移動碰撞等可以考慮使用AddForce(推力)
uj5u.com熱心網友回復:
發生碰撞的條件:兩個物體至少有一個帶剛體組件;
兩個物體必須都具備碰撞器;
你說你的模型b只添加了剛體,并沒有添加碰撞器的話,添加一個碰撞器再試試。然后就是碰撞檢測的方式了。如果B物體速度極快的話,假設第一幀的時候還沒有發生碰撞,但是由于速度過快,到第二幀的時候,計算新位置時已經錯過了A,這樣就檢測不到碰撞了。組件里有選碰撞方式的,越是要求精確的碰撞,越是需要消耗性能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/23856.html
標籤:Unity3D
