unity实现开关灯小案例

461 阅读1分钟

1.新建材质

材质类型改为skybox,并且选择cubemap值

image.png

2.导入之前的爆破人的包

3.将材质改颜色,将天空设置为暗蓝色,并且颜色tint color设置成暗蓝色

这样更有利于观察灯光效果

image.png

注意这里的cubemap是导入爆破人包里面自动会带的俩种资源。

将材质拖入窗口中,天空就会变成暗蓝色

4.新建一个小房间,四个长方形围住

5.新建一个球体,重命名为light,将标签新建light,选择light标签

image.png

6.在light下面新建一个点光源,

image.png

7.新建一个camera脚本文本,并将挂载到摄像机上面

8.点击相机,将相机的视角对齐到视图中

image.png

9.编写camera脚本文件

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

public class camera : MonoBehaviour
{
    //拿到摄像机的组件
    private Camera mainCamera;
    //初始化光线变量
    private Ray ray;

    void Start()
    {
        //先拿到当前摄像机组件
        mainCamera = GetComponent<Camera>();

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            //创建一个射线  从某个点发出--鼠标点击的点
            //Debug.Log(Input.mousePosition); //鼠标点击的位置 --z轴方向是没有变的,拿到的是x和y轴的变化的值
            //从这个点Input.mousePosition-鼠标点击的位置发射一条直线出来
            ray = mainCamera.ScreenPointToRay(Input.mousePosition);
            //获取碰撞的结果

            //创建一个信息收集器 hit--碰撞的物体
            RaycastHit hit;
            //判断是否碰撞到
            bool res = Physics.Raycast(ray, out hit); //这个表示碰撞结果返回的布尔值,同时将碰撞到的物体返回出来给你
                                                      //判断碰撞是否为小球

            //只有碰撞了才有理论可写
            if (res && hit.collider.tag == "light")
            {
                Light childLight = hit.collider.GetComponentInChildren<Light>();
                childLight.enabled = childLight.enabled ? false : true;
            }
        }



    }
}

10.效果如下:

动画3.gif