Unity3D C#代码传送

时间:2018-05-05 19:09:53

标签: c# unity3d

我想让我的玩家传送到GameObject位置当我得到7分。 当我拿起我的项目并且我的积分变为7时,我希望我的玩家传送到GameObject的位置(Cube)这是脚本C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FpsScoreScript : MonoBehaviour
{
    public int points;
    public Transform Destination;

    public void Start()
    {

    }

    public void Update()
    {
        if (points == 7)
        {
        //teleport code here
        }


    }
}

如何让它发挥作用。我希望被传送到与"公共转换目标相关联的对象;"谢谢你的回答。

3 个答案:

答案 0 :(得分:0)

只需将当前对象的位置设置为Destination的位置。

gameObject.transform.position = Destination.position;

但是,如果你直接把它放在:

if (points == 7)
{
    gameObject.transform.position = Destination.position;
}

由于你的points没有改变,每一帧都会调用Update,因此你将永远传送到多维数据集。您需要有一些东西可以防止这种情况,例如将points重置为0。

答案 1 :(得分:0)

由于你的玩家被困在地上,你可能无法移动玩家。是那样的吗?顺便说一句,这是最终的固定代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FpsScoreScript : MonoBehaviour
{
    public int points;
    public Transform destination;
    public bool teleported;

    public void Start()
    {

    }

    public void Update()
    {
        if (points == 7 && !teleported)
        {
          gameObject.transform.position = destination.position;
          teleported = true;
        }

    }
}

答案 2 :(得分:0)

由于您在update()函数中的检查,您的播放器无法移动。现在这是让你的玩家传送的代码。

理论值: 代码有private bool isTeleportedprivate function Teleport()。在更新函数中,我们将检查点是否等于7并且isTeleported是否为假,然后调用Teleport()函数。在那里我们将isTeleported设置为true,以便update()函数中的检查变为false,这样玩家就不会传送。

public class FpsScoreScript : MonoBehaviour
    {
        public int points;
        public Transform Destination;
        bool isTeleported = false;

        public void Update()
        {
            if (points == 7 && !isTeleported)
            {
            Teleport();
            }
        }
        void Teleport(){
            isTeleported = true;
            player.transform.position = destination.transform.position;
        }