我想知道是否有人可以帮我解决这个问题,我在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);
}
}
}
答案 0 :(得分:0)
之所以发生这种情况,是因为您的物品上有一个刚体'组件,而且,我想,它不是动力刚性体。基本上,它的行为就像它应该的那样:一个真实的物理对象不会通过另一个对象,这是物理引擎最基本的行为。但是,由于您不使用力来操作基于物理的对象,而是手动更改它的位置,因此您会破坏抽象级别。结果,您将对象移动到墙内,现在它无法离开。
请改用ApplyForce方法。如果你想拉或推送对象(而不仅仅是移动,这与物理管理这些对象的事实相矛盾)每一帧的方向,你应该使用ForceMode.Acceleration
(或ForceMode.Force
,如果你想要效果取决于质量)每个物理框架,这意味着你必须使用{ {1}}方法代替FixedUpdate
。