当前位置: 首页 > 知识库问答 >
问题:

如何在-1和1 usig Update或startcoroutine之间更改浮动值?

萧煜
2023-03-14
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.PlayerLoop;

public class ChangeShaders : MonoBehaviour
{
    private int val;

    // Start is called before the first frame update
    void Start()
    {
        //StartCoroutine(EffectSliderChanger());
    }

    private void Update()
    {
        gameObject.GetComponent<Renderer>().material.SetFloat("Effect Slider", val);
        Mathf.Lerp(-1, 1, Time.deltaTime);
    }

    /*IEnumerator EffectSliderChanger()
    {
        gameObject.GetComponent<Renderer>().material.SetFloat("Effect Slider", 1);
    }*/
}

我想把效果值在-1和1之间,不停地从-1变成1,当它变成1时,又变成-1,以此类推。

我不确定怎么做,是使用StartCoroutine还是在更新中做。

共有2个答案

段干瑞
2023-03-14

试试这个(我没有测试过,但应该能用):

public class ChangeShaders : MonoBehaviour
{
    private float fromValue = -1f;
    private float toValue = 1f;
    private float timeStep = 0f;
    private float val = 0f;

    private void Update()
    {
        gameObject.GetComponent<Renderer>().material.SetFloat("Effect Slider", val);
        val = Mathf.Lerp(fromValue, toValue, timeStep);

       timeStep += Time.deltaTime;
       // If you want the values to go back and forth faster use the line below instead
       // timeStep += 0.2f + Time.deltaTime;

       if (timeStep >= 1f) {
          float tempVal = fromValue;
          toValue = fromValue;
          fromValue = tempVal;
          timeStep = 0f;
       }
    }
}
班浩皛
2023-03-14

您可以使用mathf.pingpong执行此操作

Material material;

// Adjust via Inspector
public float duration = 1;

private void Awake()
{
    material = GetComponent<Renderer>().material;
}

void Update()
{
    var currentValue = Mathf.Lerp(-1 , 1, Mathf.PingPong(Time.time / duration, 1));
    material.SetFloat("Effect Slider", currentValue);
}

或者,您也可以简单地移动范围,如

这将在-11之间移动,使用pingpon的结果作为插值因子,在给定的持续时间内在01之间移动。

或者,您也可以直接移动pingpong的范围

var currentValue = Mathf.PingPong(Time.time / duration, 2) - 1f;
 类似资料:
  • 问题内容: 在Swift中,我试图获得0到1之间的随机浮点数,但是我似乎无法使类型转换正常工作。 我收到“ CGFloat”无法转换为“ UInt8”错误 运行Xcode 6。 问题答案: 尝试将除数也初始化为浮点数la:

  • 我想在我的应用程序中应用不同的主题。我想更改导航栏和浮动操作按钮的颜色。 现在我可以更改导航栏的颜色,但浮动操作按钮的颜色没有变化。当主题更改时,如何动态更改工厂的颜色? 风格: 绝妙的: 晶圆厂选择器: 谢谢你...

  • 我猜这个问题的另一种表述方式是,你可以用一个只在0到1之间的

  • 我创建了一个Jframe,它由Jbutton(Ok)、Jbutton(cancel)、Jtextfield和一个Jtable组成。我想当按下OK按钮时,焦点变为Jtextfield,当按下增益按钮时,焦点变为JTable。 如何在组件之间更改焦点? 这就是我尝试过的: 它只关注JTextfield,但不会将焦点更改为JTable 编辑:我也试过: 但没有奏效 这是整个代码:

  • 嗨,我已经尝试了一些方法来有意地在活动之间移动浮动值,但它对我不起作用,因为值会重新启动。 我的代码: 第一项活动: 第二项活动: 浮点值始终为0,并且应用程序在“第二个活动”的第二行有编译错误。 感谢帮手们!

  • 参考Google发布的新,如何更改浮动标签文本颜色? 在样式中设置、、没有帮助 这就是我现在拥有的:

  • 所以问题是当用户关闭WiFi按钮时,移动数据仍然连接,但我仍然收到WiFi关闭的通知。它指示我网络断开,即使我的手机仍然连接到移动数据。 但一秒钟后,我收到移动数据连接的通知。但是一旦我收到网络断开,我已经关闭了我的VoIP呼叫。因此,当我收到WiFi关闭的通知时,我如何确定移动数据是否仍然连接。 我尝试了getActiveNetworkInfo(),但当我收到WiFi关闭的通知时,它碰巧为nul

  • 问题内容: 我是Redis的新手,但我不知道如何创建和更改到另一个Redis数据库。 我该怎么做呢? 问题答案: 默认情况下,有16个数据库(索引从0到15),您可以使用select命令在它们之间导航。可以通过设置在redis配置文件中更改数据库数量。 默认情况下,它选择数据库。要选择一个指定的,使用 (选择数据库2)