【问题标题】:Why are BoxCollider and GameObject moving to the wrong place?为什么 BoxCollider 和 GameObject 移动到错误的位置?
【发布时间】:2019-10-31 14:36:48
【问题描述】:

我有一个空的 GameObject 作为屏障。它有一个 Kinematic Rigidbody2D 和一个 BoxCollider2D。游戏开始时,它可以与位于其上的其他游戏对象完美配合,但是当 active 布尔值翻转时,对象会转换到错误的位置。它没有转到 Vector3(0, -1060, 0),而是转到 Vector3(0, -2932.16, -219.24)。为什么要这么做???

public static bool active = false;
private Rigidbody2D block;
private Vector3 endPosition = new Vector3(0, -1060, 0);

void Start()
{
    block = GetComponent<Rigidbody2D>();
}

void Update()
{
    if (active)
    {
        transform.position = endPosition;
        block.transform.position = endPosition;
        active = false;
    }
}

【问题讨论】:

  • 请注意,Rigidbody2D 是 GameObject 的一个组件,因此 'transform.position' 和 'block.transform.position' 是相同的变换。所以,你只需要其中一个。
  • 你能告诉我们你的层次结构吗?请识别具有此脚本的游戏对象。

标签: c# unity3d rigid-bodies


【解决方案1】:

只有在本地位置不同时才必须这样做。您很可能在本地空间工作,而不是在世界空间工作。

尝试这两种方法中的任何一种。 https://docs.unity3d.com/ScriptReference/Transform.InverseTransformPoint.html https://docs.unity3d.com/ScriptReference/Transform.TransformPoint.html

【讨论】:

  • 它是如何工作的?如果我实例化一个新对象,我会摆脱旧对象吗?
  • 它不会实例化一个新对象,它会创建一个新的 Vector3,您可以将其设置为位置。不幸的是,我现在无法访问 Unity 编辑器,但我会尝试:endposition = transform.InverseTransformpoint(endposition);
  • 或者直接使用.localPosition
  • 编辑器显示游戏对象的本地位置(相对于父对象),您正在设置世界空间位置(相对于世界原点),这意味着如果有父游戏对象,大多数位置将不同案例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多