我有一个带有盒子对撞机和触发器的立方体。当玩家站在它上面时,它会掉下来。
我希望平台在与某些东西发生碰撞后自行消灭,然后在它的起始位置实例化。
所以我的代码看起来像这样:
void OnTriggerEnter(Collider col)
{
if (col.CompareTag("Player"))
isFalling = true;
}
void OnCollisionEnter(Collision col)
{
if (!col.gameObject.CompareTag("Player"))
{
Instantiate(gameObject, startPosition, startRotation);
Destroy(gameObject);
}
}
void Update()
{
if (isFalling)
{
fallingSpeed += Time.deltaTime / 20;
transform.position = new Vector3(transform.position.x, transform.position.y - fallingSpeed, transform.position.z);
}
}
当我的平台崩溃时,它只是穿过地面。甚至没有发现碰撞。
有人对我有所暗示吗?
答案 0 :(得分:1)
所以我错了。
平台没有附加刚体。因此它无法与地面发生碰撞。
这是我的新代码:
private void Start()
{
data.PlatformRigid.useGravity = false; // Disable the gravity to make it stay in the air
}
private void OnTriggerEnter(Collider col)
{
if (!data.Activated) // just do this 1 time
{
if (col.CompareTag("Player")) // just start executing the following code if the colliding object is the player
{
data.Activated = true; // don't execute this code a second time
data.PlatformRigid.useGravity = true; // start falling
}
}
}
private void OnCollisionEnter(Collision col)
{
if (!col.gameObject.CompareTag("Player"))
{
Instantiate(gameObject, data.StartPosition, data.StartRotation); // Create itself at default
Destroy(gameObject); // Destroy itself
}
}
我不再需要计算更新中的跌速。当玩家击中平台时,我只是禁用引力并启用它。
答案 1 :(得分:0)
如果您的对手设置为触发器,则不会触发OnCollisionEnter
事件。相反,请将代码放在OnTriggerEnter
中,如下所示:
void OnTriggerEnter(Collider col)
{
if (col.CompareTag("Player")) {
isFalling = true;
}
else
{
Instantiate(gameObject, startPosition, startRotation);
Destroy(gameObject);
}
}