【Unity】当摄像机被墙挡住后,墙消失,相反则出现

来源:互联网 发布:mac 文件共享 编辑:程序博客网 时间:2024/05/27 00:40

//首先,不好意思,可能标题的描述并不是很清楚

//我们现在的场景是这样的,一个摄像机在高处,场景中间有一面高墙,墙的后面有一个球形物体

//高度够高的时候我们可以看到球形物体,当摄像机的y轴下降的时候,就只能看到墙,看不到球形物体

//而我们现在的需求是,当球形物体被墙挡住的时候,我们想让墙消失,y轴够高的时候,又让墙出现

//好了,接下来看我们的代码吧~


using UnityEngine;

using System.Collections;
// 首先这个脚本放到我们的球身上
public class NewBehaviourScript : MonoBehaviour {

    public GameObject Wall;

    void Update () {


// 这行代码并没神马用,只是为了方便观察,在球形物体和摄像机之间画一条线

        Debug.DrawLine(Camera.mainCamera.transform.position,gameObject.transform.positionColor.red);


// 把球体的三维坐标转成屏幕的二维坐标,因为如果使用空间的三维坐标来计算,摄像机发射的射线很有可能是不会被墙挡住的

// 但是我们在屏幕上显示就不一样了,屏幕是二维坐标,它不管你三维空间有没有挡住啊,反正在二维坐标看起来球体就是被挡住了

// 所以我们需要进行一个三维到二维坐标的转换

        Vector3 a = Camera.main.WorldToScreenPoint(gameObject.transform.position);


// 现在我们把以前常用的鼠标输入的二维坐标换成上面的a(大家原谅我简介不明了的命名规范吧 - -!)

        Ray ray = Camera.main.ScreenPointToRay(a);


// 定义一个打击信息

        RaycastHit hit;


// 如果射线打击到了物体

        if (Physics.Raycast(rayout hit) )

        {

    // 这里的Wall是我给墙那个物体起的名字,如果打击到的物体名字是Wall的话

            if (hit.transform.name == "Wall")
            { // 让墙的网格渲染器不激活
                Wall.transform.GetComponent<MeshRenderer>().enabled = false;
            }
            else  
            {   // 如果射线打击到的物体不是墙,就让墙的网格渲染器激活
                Wall.transform.GetComponent<MeshRenderer>().enabled = true;
            }
            
            
        }   
   }
}
0 0
原创粉丝点击