让对象的组件在足够远的地方禁用一次

Posted

技术标签:

【中文标题】让对象的组件在足够远的地方禁用一次【英文标题】:Having Components of Objects Disable once far enough away 【发布时间】:2021-10-02 23:31:45 【问题描述】:

我正在制作一个无限街机风格的游戏,当玩家开始游戏时,球会在地图上随机生成,玩家的目标是击中它们并获得积分。

无论如何,如果玩家距离足够远,我想禁用碰撞器和精灵以使游戏运行更流畅。或者如果球会自行删除,然后在玩家靠近时重生。

对不起,如果这有点令人困惑。此外,如果发生任何变化,球会被实例化。

【问题讨论】:

嗨,到目前为止,您尝试了哪些方法,哪些方法不起作用? 我还没有真正尝试过任何东西,我正在查找一些东西,但并没有真正申请。我正在寻找一个起点。 你可以尝试的一件事:Vector3.Distance(playerPosition,ballPosition)>YourDistanceThreshold 听起来不错,但我需要更多关于删除\禁用部分的帮助,也许是它可以保存位置,然后在超出范围时删除。 【参考方案1】:

如果你从头开始,你不需要太在意优化,因为我们会在你完成游戏之后再做。你需要专注于游戏设计和游戏机制。如果您需要生成对象,您需要了解Instantiate 方法。你想让球每秒随机生成,你现在需要 InvokeReapeating 方法。或者更高级,您将必须了解对象池等等。从头开始学习,不要想复杂。当你完成了基本的工作,就继续做更大的事情,是的

【讨论】:

感谢您的帮助,我会进一步研究 InvokeRepeating。【参考方案2】:

您可以使用 Destroy(GameObject) 删除不再需要的游戏对象。


    Destory(gameObject); // this destroys the game object that the script is attached to

有许多教程可以在各种情况下销毁游戏对象,例如离开可玩区域。

似乎接近您正在寻找的最简单的方法是检查球与球员的距离,如果大于阈值,则自毁。这需要通过 Ball 上的脚本完成,并且您需要对 Player 对象的引用


    const float Threshold = 25f; // Some distance away from the player
    public GameObject Player; // Drop the player on here from the editor, or find using a tag, name, etc.

    void Update()
    
        // Get the absolute distance between the object and the player
        var distanceToPlayer = Mathf.Abs(Vector3.Distance(transform.position, player.transform.position)); 
        // If greater than threshold, goodbye
        if (distanceToPlayer > Threshold)
        
            Destroy(gameObject);
        
    

现在,如果您想在玩家返回到可由您的生成管理器处理的区域后重新生成该对象,方法是跟踪其生成的对象、事件侦听器等的状态。

【讨论】:

以上是关于让对象的组件在足够远的地方禁用一次的主要内容,如果未能解决你的问题,请参考以下文章

Joomla 后端在我的组件中禁用错误​​报告

如何通过脚本启用/禁用按钮组件?

Swift之SwiftUI自定义star rating评分组件

vueprovide传值对象不能取data的值

Vue3 中使用 defineAsyncComponent 延迟加载组件

安装unity组件怎么改安装路径?