简体   繁体   English

水下团结5

[英]Underwater in unity5

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;

    }
}

How can I detect if my character is under water? 如何检测我的角色是否在水下? Water is above the ground(a lake between the hills) so I can't use negative Y-axis. 水在地面上(山间的湖泊),所以我不能使用负Y轴。 I'm using FPSController from Unity Standard Assests. 我正在使用Unity Standard Assests的FPSController。

Make a large Collider the size of the water. 使大型Collider达到水的大小。 Make it a trigger. 使其触发。 Make it's tag "Water" 将其标记为"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
    }
}

I'm posting an answer rather than a comment since I can't comment yet. 由于我无法发表评论,因此我发布的是答案而不是评论。

Similar to what Andrew said, to prevent your game from thinking you're underwater as soon as your character puts its foot in the water, You could add an empty gameobject a few centimeters above your character's head and put a collider on that. 与安德鲁(Andrew)所说的类似,为了防止您的角色一踏入水中,游戏就不会认为您在水下,您可以在角色头部上方几厘米处添加一个空的游戏对象,并在其上放置一个对撞机。

Then use Andrew's logic to determine that your character is underwater. 然后使用安德鲁的逻辑确定您的角色在水下。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM