3d (Unity着色器)当玩家触摸冰对象时,冰融化脚本不起作用

3d (Unity着色器)当玩家触摸冰对象时,冰融化脚本不起作用,3d,virtual-reality,3d,Virtual Reality,我是noob,正在学习unity来制作VR内容。我想在玩家触摸冰的物体时实现融冰功能,但它不起作用,所以我问了这个问题 首先,我使用在资产商店购买的ice着色器的脚本(这是一个在运行场景时冻结的脚本),我附加OnTiggerEnter并调用UpdateMaterialUnFreeze();当玩家触摸冰面时,冰面会再次融化,但它不起作用。球体碰撞器也连接到控制器和ice。这是第一次,所以很难让它变得简单。你能帮助我吗?先谢谢你 using System.Collections.Generic; u

我是noob,正在学习unity来制作VR内容。我想在玩家触摸冰的物体时实现融冰功能,但它不起作用,所以我问了这个问题

首先,我使用在资产商店购买的ice着色器的脚本(这是一个在运行场景时冻结的脚本),我附加OnTiggerEnter并调用UpdateMaterialUnFreeze();当玩家触摸冰面时,冰面会再次融化,但它不起作用。球体碰撞器也连接到控制器和ice。这是第一次,所以很难让它变得简单。你能帮助我吗?先谢谢你

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

public class FreezeBehaviour : MonoBehaviour
{

  public Material iceMaterial;
  public bool isFrozen;
  public float FreezeTime = 5;

  private Material oldMaterial;
  private bool isCanSetMaterial = true;
  private float cutoff;
  private FrozenState frozenState = FrozenState.Default;
  // Use this for initialization
  private void Start()
  {
    if(iceMaterial == null) Debug.Log("FreezeBehaviour can't fing Ice material");
    oldMaterial = GetComponent<Renderer>().materials[0];
    if (iceMaterial!=null)
      iceMaterial.SetFloat("_Cutoff", 0);
  }

  // Update is called once per frame
  private void Update()
  {
        if (isFrozen) { 
            frozenState = FrozenState.LoadMaterial;
            Debug.Log("isFrozen");
        }

        else if (frozenState != FrozenState.Default) { 
            frozenState = FrozenState.UpdateMaterialUnFreeze;
            Debug.Log("Defalut");
        }
      if (frozenState == FrozenState.LoadMaterial) {
            LoadMaterial();
            Debug.Log("LoadMaterial");
        }
      
      
        if (frozenState == FrozenState.UpdateMaterialFreeze) { 
            UpdateMaterialFreeze();
            Debug.Log("alFreeze");
        }
   // 

       
  }


    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("scene"))
        {
            

            if (frozenState == FrozenState.UpdateMaterialFreeze)
            {

               UpdateMaterialUnFreeze();
                Debug.Log("UnFreeze");
            }
           ;
        }
    }

    private void LoadMaterial()
  {
    isCanSetMaterial = false;
    var materials = new Material[2];
    materials[0] = oldMaterial;
    materials[1] = iceMaterial;
    GetComponent<Renderer>().materials = materials;
    frozenState = FrozenState.UpdateMaterialFreeze;
  }

  private void UpdateMaterialFreeze()
  {
    var time = Time.deltaTime / FreezeTime;
    if (cutoff + time <= 1) {
      cutoff += time;
      iceMaterial.SetFloat("_Cutoff", cutoff);
    }
    else frozenState = FrozenState.Frozen;
  }

  private void UpdateMaterialUnFreeze()
  {
    var time = Time.deltaTime / FreezeTime;
    if (cutoff-time > 0) {
      cutoff -= time;
      iceMaterial.SetFloat("_Cutoff", cutoff);
    }
    else frozenState = FrozenState.Default;
  }

  enum FrozenState
  {
    Default,
    LoadMaterial,
    UpdateMaterialFreeze,
    UpdateMaterialUnFreeze,
    Frozen
  }

  
  
}

使用System.Collections.Generic;
使用UnityEngine;
使用系统集合;
公共行为:单一行为
{
公共材料;
公共图书馆被冻结;
公共浮动时间=5;
私人材料;
private bool isCanSetMaterial=真;
私人浮动切断;
private FrozenState FrozenState=FrozenState.Default;
//用于初始化
私有void Start()
{
if(iceMaterial==null)Debug.Log(“冻结行为无法保存Ice材质”);
oldMaterial=GetComponent().materials[0];
如果(iceMaterial!=null)
iceMaterial.SetFloat(“_截止”,0);
}
//每帧调用一次更新
私有void更新()
{
如果(已冻结){
frozenState=frozenState.LoadMaterial;
Debug.Log(“isfreezed”);
}
如果(frozenState!=frozenState.Default){
frozenState=frozenState.UpdateMaterialUnFreeze;
Debug.Log(“Defalut”);
}
if(frozenState==frozenState.LoadMaterial){
装载材料();
Debug.Log(“LoadMaterial”);
}
如果(frozenState==frozenState.UpdateMaterialFreeze){
UpdateMaterialFreeze();
Debug.Log(“alFreeze”);
}
// 
}
无效对撞机(对撞机其他)
{
if(other.CompareTag(“场景”))
{
如果(frozenState==frozenState.UpdateMaterialFreeze)
{
UpdateMaterialUnFreeze();
Debug.Log(“解冻”);
}
;
}
}
私有void LoadMaterial()
{
isCanSetMaterial=假;
var材料=新材料[2];
物料[0]=旧物料;
材料[1]=冰材料;
GetComponent().materials=材料;
frozenState=frozenState.UpdateMaterialFreeze;
}
私有void UpdateMaterialFreeze()
{
变量时间=time.deltaTime/冻结时间;
如果(截止+时间0){
截止时间-=时间;
iceMaterial.SetFloat(“_截止”,截止);
}
else frozenState=frozenState.Default;
}
枚举冻结状态
{
违约
装载材料,
更新材料冻结,
更新材料冻结,
冻结的
}
}