首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象与控制器碰撞后更改方向

对象与控制器碰撞后更改方向
EN

Stack Overflow用户
提问于 2017-12-13 18:28:09
回答 3查看 299关注 0票数 1

在Unity3D中,我得到了一个游戏对象,它与一个盒子对撞机和物理材料相连。手控制器模型也附加在盒子对撞机和物理材料上。当游戏对象与手控制器发生冲突时,CollideWithController会登录控制台。但是,游戏对象不会改变方向。

代码语言:javascript
复制
if (other.CompareTag("HandController")) 
{
    Debug.Log("CollideWithController");
    var magnitude = 1000;
    var force = transform.position - other.transform.position;
    force.Normalize();
    gameObject.GetComponent<Rigidbody>().AddForce(force * magnitude);
}
EN

回答 3

Stack Overflow用户

发布于 2017-12-13 22:21:32

如果不知道/看不到other是什么,很难说,但通常会有两个问题:

  1. transform.position-other.transform.position实际上并不会导致您期望的方向。要确定这一点,请打印值或使用Debug.DrawRay.
  2. The力显示它。您添加的力可能不足以改变方向,或者有其他力将其抵消。
票数 0
EN

Stack Overflow用户

发布于 2017-12-13 22:29:18

代码语言:javascript
复制
var force = transform.position - other.transform.position;

你将得到一个方向向量,以获得其他到这个的位置。所以你正在移动到碰撞中,反转向量应该可以解决你的问题。

票数 0
EN

Stack Overflow用户

发布于 2017-12-13 22:30:50

当你像这里用AddForce修改物理值时,你应该在FixedUpdate中这样做,以最大限度地减少错误的风险。(它可以在FixedUpdate之外工作,但在大多数情况下,它会产生不需要的行为)。

在您的代码中使用AddFroce,但如果gameObject的实际力大于此值,则您添加的力只会减慢游戏对象的实际移动速度,而不会使其反转。

我认为改变gameObject移动的最好方法是使用速度矢量并反射它。

还有一个建议:不要在游戏系统中使用物理原理。物理学是非常强大的东西,它可以带来许多紧急行为,但它是一个混乱的系统。当涉及到游戏性时,你不想要混乱,你想要控制和一致性。

Unity文档:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47790755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档