【问题标题】:Increase slider when player collides with object. Unity当玩家与物体碰撞时增加滑块。统一
【发布时间】:2020-05-02 13:39:51
【问题描述】:

所以我有一个玩家氧气的脚本,它就像一个计时器,当它达到 0 时游戏结束。

我希望玩家能够在我创建的世界中收集氧气,当他们与氧气物体碰撞时,滑块会增加,但不应超过 100。

下面是我的滑块代码。

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

public class oxygenscript : MonoBehaviour
{
    public Slider oxygenbar;
    public float oxygen;
    public float maxhealth = 1000;

    void Start()
    {
        oxygen = maxhealth;
        oxygenbar = GetComponent<Slider>();
        oxygenbar.maxValue = maxhealth;
        oxygenbar.value = oxygen;
    }
    void Update()
    {
        oxygen -= 0.1f;
        oxygenbar.value = oxygen;

        if (oxygen <= 0)
        {
            GameManager.Instance.setGameOver();

            Time.timeScale = 0;
        }
    }
}

【问题讨论】:

  • 发布您的代码。
  • 代码有什么问题?除了氧气损失率基于帧率而不是 time.deltaTime 或其他任何事实之外。
  • 当玩家与物体碰撞时如何增加滑块的时间
  • 本题与unityscript无关

标签: c# unity3d


【解决方案1】:

要增加碰撞时的氧气滑块,您首先需要检测碰撞。您的氧气游戏对象和玩家游戏对象都需要在编辑器中添加对撞机。然后您将需要其中一个来实现OnCollisionEnter 方法。您可以使用Collision 类型的对象来检查您是否与预期的相撞。

在统一文档上检测碰撞的一般文档非常好:https://docs.unity3d.com/ScriptReference/Collision-gameObject.html

我建议让您的播放器现在实施碰撞检测,如果它变得太杂乱,请移动它。像这样的:

   void OnCollisionEnter(Collision collision)
   {
       if (collision.gameObject.Name == "Oxygen") oxygen += <something>;
   }

如果您希望单独的 Oxygen 游戏对象具有不同的“点数”,那么在 Oxygen 游戏对象而不是玩家上实现碰撞检测可能会更容易。否则,您需要进行一些转换以获取 Oxygen GameObject 类型以查看其中的特定值。 (看起来像var oxygenValue = ((Oxygen)collision.GameObject).oxygenValue;

【讨论】:

    【解决方案2】:

    正如您的代码所说,您的滑块会跟随氧气水平。 所以,剩下的就是做一个氧气点了。

    您的氧气点游戏对象将需要一个对撞机。注意:您必须相应地选择 2D 或 3D,它们之间不能相互碰撞。

    确保您的对撞机是触发器。这意味着您的对象在某种意义上不是“solid”(我假设这是某种收藏品)。

    为您的氧气点添加标签。随心所欲地命名它。这将派上用场。对于这个例子,让我们使用“氧点”。这比使用直接名称比较要好得多。

    当你的 GameObject 在你的场景中设置好后,转到你的 oxygenscript 并添加以下函数。

    private void OnTriggerEnter(Collider other)
    {
        //If the GameObject you are colliding posesses the "Oxygen Point" tag.
        if(other.CompareTag("Oxygen Point"))
        {
            //You increment your oxygen levels to your desired value.
            oxygen += 0.5f;
    
            //Destroy your oxygen point! Otherwise you will be able to collect it indefinetetly
            Destroy(other.gameObject);
        }
    }
    

    你应该没问题。如果您想了解更多详细信息或我遗漏任何内容,请随时发表评论。保重。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2023-03-05
      相关资源
      最近更新 更多