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赋值给自己。这样就完成了简单的变换。

  • 相关阅读:
    远程服务器同步配置
    什么是微服务架构,.netCore微服务选型
    Servlet与JSP版本历史以及Tomcat支持的版本
    JDK里面的JRE是什么
    JDK与Java SE/EE/ME的区别
    javaBean和Servlet有什么区别
    JSP的JSTL标签使用
    Java语法教程
    eclipse使用教程
    JSP生命周期
  • 原文地址:https://www.cnblogs.com/2Yous/p/4238392.html
Copyright © 2011-2022 走看看