zoukankan      html  css  js  c++  java
  • Unity3D 创建动态的立方体图系统

    Unity3D 创建动态的立方体图系统

    这一篇主要是利用上一篇的Shader,通过脚本来完成一个动态的立方体图变化系统。

    准备工作如下:

    1. 创建一个新的场景、一个球体。提供给场景一个平行光,准备2个立方体图
    2. 添加两个空对象,并分别命名为Empty1和Empty2,给他们分配不同的位置
    3. 给球体添加一个新的材质,并使用FresnelReflection Shader(上一篇)。
    4. 最后,创建一个脚本,并命名为CubeDynamic.cs,把它赋给球体。

    A:下面开始编写脚本:

    //2个立方体图;

        public Cubemap cubeMapA;
    
        public Cubemap cubeMapB;

    //2个参考位置Empty12;

        public Transform posA;
    
        public Transform posB;
    
     
    
        private Material tempMat;
    
        private Cubemap tempCubeMap;
    
      private int times = 0;

    B:为了方便观测Empty12的位置,我们使用OnDrawGizmos函数来绘制对象:

        void OnDrawGizmos() {
    
            Gizmos.color = Color.green;
    
            if(posA){
    
                Gizmos.DrawWireSphere(posA.position,5);
    
            }
    
            if(posB){
    
                Gizmos.DrawWireSphere(posB.position,5);
    
            }
    
        }

     

    C创建一个新的函数来决定在不同的位置我们应该使用哪个Cubemap

       

    private Cubemap GetUseCubeMap() {
    
            float lengthA = Vector3.Distance(transform.position,posA.position);
    
            float lengthB = Vector3.Distance(transform.position,posB.position);
    
            if(lengthA>lengthB){
    
     
    
                return cubeMapB;
    
            }
    
            else if (lengthA < lengthB)
    
            {
    
                return cubeMapA;
    
            }
    
            else {
    
                return cubeMapA;
    
            }
    
    }

    D:在Update函数中进行赋值

    void Update () {
    
            times++;
    
            if(times%20==0){//避免每一帧都计算;
    
                tempMat = renderer.sharedMaterial;
    
                if (tempMat)
    
                {
    
                    tempCubeMap = GetUseCubeMap();
    
                    tempMat.SetTexture("_CubeMap", tempCubeMap);
    
                  
    
                }
    
                times = 0;
    
            }
    
    }

    保存脚本,返回Unity编辑器。点击Play按钮,并前后左右移动球体。你将会看到类似下面的效果

     

     

     

     

    通过上面简单的代码,我们可以看出程序会固定帧数为一个时间段来判断球体和2个参考位置的间距来计算自身使用哪一种cubemap,再把cubemap赋值给自己。这样就完成了简单的变换。

  • 相关阅读:
    DNS子域授权,区域传送
    DNS BIND配置 配置基本缓存服务器 DNS正向解析 DNS反向解析
    DNS服务概念
    【转】Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
    CMD命令
    PHP Mysql数据库连接
    Mysql数据库报错1264
    Linux下nginx的安装
    windows下nginx的安装
    【转载】详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
  • 原文地址:https://www.cnblogs.com/2Yous/p/4238392.html
Copyright © 2011-2022 走看看