【问题标题】:Teleporting to a projectile - Moving the player errorTeleporting to a projectile - 移动玩家错误
【发布时间】:2023-01-17 06:49:08
【问题描述】:

我一直在从事一个项目,涉及实例化一个球体,然后在击中我用“地板”标记的任何对象时将玩家传送到它的位置。我对编程比较陌生,因此非常感谢您的帮助。

  void OnCollisionEnter(Collision col)
    {
        if (col.gameObject.tag == "Floor")
        {
            script.canShoot = true;
            isTriggered = true;
            player.transform.position = teleportLocation;
            Destroy(gameObject);
            Debug.Log("hit floor");
        }

我的“teleportLocation”只是目前球体的恒定位置。

目前我面临的问题是移动玩家,我用玩家替换了一个在设置位置时确实有效的立方体。 这是我用于实例化射弹的脚本:

  Vector3 dir = mouse.transform.position - transform.position;
        if (!disabled)
        {

             GameObject instance = Instantiate(orbPrefab, orbShooter.transform.position, orbPrefab.transform.rotation);
             instance.GetComponent<Rigidbody>().AddForce(dir * power);
             instance.transform.position = new Vector3(0, 0, 0);

        }

我能够成功将玩家传送到球体的唯一方法是通过这个脚本:

public class teleport : MonoBehaviour
{
    public Vector3 tpPos;
    public GameObject testOrb;
    // Start is called before the first frame update
    void Start()
    {
     
    }

    void Update()
    {
        tpPos = testOrb.transform.position;
        if (Input.GetKeyDown(KeyCode.E))
        {
            transform.position = tpPos;
        }
    }
}

当我按下“E”时,我可以将玩家移动到一个球体(这不是一个实例化的对象,而是一个通过单击移动的普通游戏对象),这似乎有效。 问题似乎不在于碰撞检测或变换位置,而是在于实例化。如果有人知道可以将我的玩家传送到实例化的球体的方法,那将会很有帮助。

以上涉及我尝试过的不同事情......

【问题讨论】:

  • 只是为了看看我是否正确,你是说你的实例化球体没有传送你的角色,只是你场景中预先存在的球体正在工作。我对吗?
  • 另外,你有什么错误吗?或者事情很简单不起作用?
  • 请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: c# unity3d 3d instantiation teleport


【解决方案1】:

找到了解决方案,该解决方案仅涉及在附加到玩家的脚本中创建一个方法,该方法将玩家的变换位置更改为球体。当它与地板碰撞时,然后在 orb 脚本内部调用该方法。 问题似乎出在脚本内部出于某种原因调用传送的位置,希望其他人也能理解是否也有此问题。

【讨论】:

  • 请澄清您的答案,并详细说明您是如何修复它的。通过阅读问题和现在的答案,我不太清楚确切的解决方法是什么。
【解决方案2】:

很抱歉回答晚了,我一直在有限的时间范围内完成项目(通常每个项目 5 周或更短时间),一旦我解决了它,我就前进得太快了。我记得这个问题是由于脚本中动作发生的顺序造成的。我不完全确定,但我只能说:

我想让我的玩家射击一个球体(通过实例化)然后让他们传送到球体(我认为这可以通过简单地设置 player.transform.position = orb.transform.position 来完成

然而,这没有效果。 然后我尝试以不同的方式设置玩家的位置,并解决问题是由于碰撞还是其他原因造成的。碰撞非常好。

在此之后,我最后的努力是在玩家脚本(附加到玩家对象)中创建一个子例程/函数,然后从 orb 脚本调用该函数(当它影响地板时)。

我没想到这会起作用,但它确实起作用了,所以我只能怀疑这个问题是被调用的顺序中的某种错误? 我不完全确定,但如果您需要进一步详细说明,我很乐意这样做!谢谢你的耐心 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多