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