首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么collider.enable = true在我的代码中不起作用?

为什么collider.enable = true在我的代码中不起作用?
EN

Stack Overflow用户
提问于 2019-06-07 03:11:17
回答 1查看 345关注 0票数 1

在类似小行星的游戏中工作,当我的船被击中时,它会爆炸,我实例化了一艘新船,并用盾牌包围了它几秒钟。当飞船被护盾包围时,我会在几秒钟内停止碰撞。这一切都行得通。几秒钟后,我隐藏了屏蔽(SetActive(false)),然后设置playerCollider.enabled = true。护盾隐藏了,但对撞机不会重新启动。

当被杀死时的代码

代码语言:javascript
运行
复制
 public void KilledWaitTime()
    {
        SetLivesText();
        Instantiate(player); //respawns player after killed
        shield.SetActive(true);
        playerCollider.enabled = false; //disables collider while shield up.
        Debug.Log("collider = " + playerCollider.name);
        Debug.Log("player = " + player.name);
        Invoke("RemoveShields", 3);
    }

移除屏蔽并重新启用对撞机的代码

代码语言:javascript
运行
复制
 public void RemoveShields()
    {
        shield.SetActive(false);
       // Collider pc = player.GetComponent<Collider>();
        Debug.Log("collider pc = " + playerCollider.name);
        Debug.Log("player pc = " + player.name);
        playerCollider.enabled = true;

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-07 03:20:21

当您调用Instantiate(player);时,您正在创建一个与前一个播放器对象完全不同的对象。实例化播放器对象时,需要重新分配playerCollider以引用新创建的对象上的碰撞器。

您可能还希望将您的播放器预置和当前播放器对象分开:

代码语言:javascript
运行
复制
private GameObject playerPrefab;
private GameObject player;

public void KilledWaitTime()
{
    SetLivesText();
    player = Instantiate(playerPrefab); //respawns player after killed
    playerCollider = player.GetComponent<Collider>();

    shield.SetActive(true);
    playerCollider.enabled = false; //disables collider while shield up.
    Debug.Log("collider = " + playerCollider.name);
    Debug.Log("player = " + player.name);
    Invoke("RemoveShields", 3);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56483717

复制
相关文章

相似问题

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