我尝试为Android制作游戏,我对高速物体有问题,他们不想碰撞。
我有Sphere Collider和Bouncy材质的Sphere,以及这个参数的RigidBody(Gravity = false,Interpolate = Interpolate,Collision Detection = Continuous Dynamic)
此外,我还有3个带有Box Collider和Bouncy材料的墙壁。
这是我的Sphere代码
function IncreaseBallVelocity() {
rigidbody.velocity *= 1.05;
}
function Awake () {
rigidbody.AddForce(4, 4, 0, ForceMode.Impulse);
InvokeRepeating("IncreaseBallVelocity", 2, 2);
}
在项目设置中我设置:“惩罚力的最小渗透率”= 0.001,“解算器交互计数”= 50
当我在开始时发挥它的效果很好(它反弹)但是当速度变高时,Sphere就会越过墙壁。
任何人都可以帮助我吗?
感谢。
被修改
var hit : RaycastHit;
var mainGameScript : MainGame;
var particles_splash : GameObject;
function Awake () {
rigidbody.AddForce(4, 4, 0, ForceMode.Impulse);
InvokeRepeating("IncreaseBallVelocity", 2, 2);
}
function Update() {
if (rigidbody.SweepTest(transform.forward, hit, 0.5))
Debug.Log(hit.distance + "mts distance to obstacle");
if(transform.position.y < -3) {
mainGameScript.GameOver();
//Application.LoadLevel("Menu");
}
}
function IncreaseBallVelocity() {
rigidbody.velocity *= 1.05;
}
function OnCollisionEnter(collision : Collision) {
Instantiate(particles_splash, transform.position, transform.rotation);
}
EDITED添加了更多信息
答案 0 :(得分:4)
请参阅:
您也可以尝试更改fixed time step for physics。此值越小,Unity计算场景物理的次数就越多。但要注意,将此值设置得太小,比如说&lt; = 0.005,可能会导致游戏不稳定,尤其是在便携式设备上。
上面的脚本最适合项目符号或小对象。您可以进行manually force刚体碰撞测试:
public class example : MonoBehaviour {
public RaycastHit hit;
void Update() {
if (rigidbody.SweepTest(transform.forward, out hit, 10))
Debug.Log(hit.distance + "mts distance to obstacle");
}
}
答案 1 :(得分:2)
我认为主要问题是操纵Rigidbody
的{{1}}。我会尝试以下方法来解决问题。
velocity
内调用IncreaseBallVelocity
和Rigidbody
的所有其他操作。检查FixedUpdate
没有其他操作。Transform.position
或类似方法直接替换设置速度,以便物理引擎有更高的机会计算所有依赖关系。我偶然发现的另一点是网格非常大。如果AddForce
具有比例&lt; = 0.01或&gt; = 100,则肯定会对物理计算产生负面影响。根据其中一位大师的docs和this Unity forum entry,你应该避免使用Transform.scale值!= 1
还不开心吗?那么接下来的测试是从高速开始但没有加速。在这个阶段,我们想要知道,如果高速度本身或加速度是造成问题的原因。知道物理引擎开始失败的速度值会很有趣 - 请发布它们以便我们比较它们。
编辑:还有一些需要调查的事情
6.7米/秒听起来不是那么多,所以我猜有一个特殊的原因或出现问题的原因组合。
GameObject
。请注意,这可能会破坏帧速率,但可以稍后进行修改。Fixed Timestep
0.01
,您是否注意到帧率有任何下降?这表明物理引擎可能遇到麻烦。FixedTimestep
的物体)被移动或以其他方式操纵?这将导致在PhysX中重新计算。Rigidbody
不应该为此负责(我对此做了非常糟糕的经历)。transform.scale
?