首页 > 解决方案 > 改变玩家位置后无法移动

问题描述

我正在尝试进行传送。玩家击中传送点,然后前往另一个传送点。然而,当他到达那里时,他无法动弹......

// Update is called once per frame
void Update()
{
    if(hitted1){
        posi = new Vector3(42.49f, 0.5f, 163.8f); 
        player.transform.position = posi;
        //hitted1 = false;
    }
}

void OnTriggerEnter(Collider other){
    if(other.name == "FPSController"){
        Debug.Log("player hit tele1");
        hitted1 = true;
    }
}

标签: c#unity3d

解决方案


好像您正在使用标准资产中的 FPSController。如果为真,则该 FPSController 对象包含 CharacterController 组件。该组件可能会阻止更改对象的位置transform.position(换句话说,位置将更改为特定位置,但之后对象将返回到更改之前设置的先前位置transform.position)。

正如您所描述的,FPSController 对象在被传送到新位置后刚刚冻结。这是因为当 valuehitted1更改为时trueplayer.transform.position = posi;运行每个Update()原因hitted1值都停留在true.

但是,当您尝试取消注释hitter1 = false时,FPSController 对象会返回到之前的位置。这是因为 CharacterController 在通过 更改位置时保持启用状态transform position

尝试:

CharacterController controller;


    void Start() {
    controller = player.GetComponent<CharacterController>();
    }  
    void Update()
    {
        if(hitted1){
            posi = new Vector3(42.49f, 0.5f, 163.8f);
            controller.enabled = false;
            player.transform.position = posi;
            controller.enabled = true;
            hitted1 = false;
        }
    }

推荐阅读