Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2208.00元
灯光跳动频率
莫忘初心zz发起了问答2018-02-07
7
回复
435
浏览

Time.time /  2 * Mathf.PI;在网上搜有人说是求余弦,这感觉不可能,求什么意思

所有回复
  • 老师_Bathur 2018-02-07

    您好~这是什么脚本或者什么情况下这么使用的呢?

    /2PI是用来算周期的~2PI即360度嘛~

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 莫忘初心zz 2018-02-07

    public static Alert_Light _instance;

        public bool isAlert = false;

        public float duration = 1.0F;

        public Light lt;

        void Start()
        {
            lt = GetComponent<Light>();
            _instance = this;
        }

        void Update()
        {
            if (isAlert)
            {
                float phi = Time.time / duration * Mathf.PI;
                float amplitude = Mathf.Cos(phi) + 1.5F;
                lt.intensity = amplitude;
            }
            else
            {
                lt.intensity = Mathf.Lerp(lt.intensity, 0, Time.deltaTime * 2);
            }
        }

    灯光在1秒特定时间内闪烁一次,游戏运行过程中一直进行,只是查询的linght中的Intensity API代码,就上面我所发的那一行在网上搜说是余弦定理,感觉在瞎扯,这明明是周长,问问这行代码究竟是什么意思,

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 老师_Bathur 2018-02-07

    您好~我们来看一下数学方面的知识

    float phi = Time.time / duration * Mathf.PI;
    float amplitude = Mathf.Cos(phi) + 1.5F;
    lt.intensity = amplitude;

    第三句是设置光强所以我们忽略掉,看一、二两句是否可以经过以下几步改写成一个函数

    Time.time是游戏开始一直到当前帧所经历的的时间,单位是秒,我们可以看成自变量x,有

    phi=x/duration*PI

    此处的duration为闪烁间隔,上式带入,有

    amplitude=cos(x/duration*PI)+1.5

    这里我们再将最后需要的amplitude看做因变量y

    得到函数

    y=cos(x/duration*PI)+1.5

    其中duration为给定的参数,是闪烁间隔,1.5其实也可以是参数,也就是额外增加的光强

    最后我们得到如下函数表达式

    y=cos(x/d*PI)+a,其中d为闪烁间隔,a为额外光强

    这里我们取d=1,a=1.5可以得到函数图像如下

     

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 红领子20170924 2018-02-08

    这这么解决

    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • 莫忘初心zz 2018-02-09

    了解了,感谢解答laugh

    还有-4条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!