对象碰撞问题 - 奇怪的行为 - 团结

时间:2015-04-29 01:55:51

标签: object unity3d collision

我想知道是否有人可以帮我解决这个问题,我在Unity中遇到过对象和碰撞。

我的球形物体由用户手机的加速度计控制。球体移动得很好但是一旦撞到墙壁,球体开始变得怪异。它沿着与其碰撞的墙壁的方向拉动,开始弹跳,并且整体上对手机的运动不再响应。

任何想法为什么会发生这种情况?

以下是用于控制玩家范围的脚本。

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {
public float speed;
void Update() {
    Vector3 dir = Vector3.zero;
    dir.x = Input.acceleration.x;
    dir.z = Input.acceleration.y;
    if (dir.sqrMagnitude > 1)
        dir.Normalize();

    dir *= Time.deltaTime;
    transform.Translate(dir * speed);
}

void OnTriggerEnter (Collider other) 
{
    if (other.gameObject.tag == "Pickup") {
        other.gameObject.SetActive(false);
    }
}
} 

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为您的物品上有一个刚体'组件,而且,我想,它不是动力刚性体。基本上,它的行为就像它应该的那样:一个真实的物理对象不会通过另一个对象,这是物理引擎最基本的行为。但是,由于您不使用力来操作基于物理的对象,而是手动更改它的位置,因此您会破坏抽象级别。结果,您将对象移动到墙内,现在它无法离开。

请改用ApplyForce方法。如果你想推送对象(而不仅仅是移动,这与物理管理这些对象的事实相矛盾)每一帧的方向,你应该使用ForceMode.Acceleration(或ForceMode.Force,如果你想要效果取决于质量)每个物理框架,这意味着你必须使用{ {1}}方法代替FixedUpdate