水下团结5

时间:2015-08-26 17:32:50

标签: unity3d game-engine unityscript

using UnityEngine;
using System.Collections;

public class underWater : MonoBehaviour {
    public float uwaterLevel=15f;
    public Color normalColor;
    public Color underWaterColor;



    void Start () {
        normalColor = new Color (0.5f,0.5f,0.5f,0.5f);
        underWaterColor = new Color (0.22f,0.65f,0.77f,0.5f);

    }


    void Update () {
        Debug.Log (uwaterLevel);
        Debug.Log (transform.position.y);
        if(Camera.main.transform.position.y<uwaterLevel){
            Debug.Log("Underwater Update");
            setUnderWater();
        }else{
            Debug.Log("Normal Update");
            setNormal();
        }

    }
    public void setUnderWater(){
        Debug.Log("Under Water");
        RenderSettings.fog = true;
        RenderSettings.fogDensity = 0.05f;
        RenderSettings.fogColor = underWaterColor;

    }
    public void setNormal(){
        Debug.Log("Normal");
        RenderSettings.fog = true;
        RenderSettings.fog = false;
        RenderSettings.fogDensity = 0.003f;
        RenderSettings.fogColor = normalColor;

    }
}

如何检测我的角色是否在水下?水高于地面(山丘之间的湖泊)所以我不能使用负Y轴。我使用Unity Standard Assests的FPSController。

2 个答案:

答案 0 :(得分:1)

大小Collider大小的水。让它成为一个触发器。制作标记"Water"

public void OnTriggerEnter(Collider col)
{
    if(col.tag == "Water")
    {
        // In water
    }
}

public void OnTriggerStay(Collider col)
{
    if(col.tag == "Water")
    {
        // In water
    }
}

public void OnTriggerExit(Collider col)
{
    if(col.tag == "Water")
    {
        // Exit water
    }
}

答案 1 :(得分:0)

我发布了答案而不是评论,因为我还没有发表评论。

类似于安德鲁所说的,为了防止你的游戏在你的角色踩到水中时认为你在水下,你可以在角色的头部上方几厘米处添加一个空的游戏对象并在其上放置一个对撞机

然后使用安德鲁的逻辑来确定你的角色是否在水下。