如何解决Unity Shader当玩家触摸冰块时,融冰脚本不起作用
我是菜鸟,正在研究制作VR内容的统一性。我想在玩家触摸冰块对象时实现冰块融化功能,但是它没有用,所以我问了一个问题。
首先,我使用在Asset Store商店购买的冰着色器的脚本(此脚本在运行场景时会冻结),并附加OnTriggerEnter并调用UpdateMaterialUnFreeze();功能,使冰块在玩家触摸时再次融化,但不起作用。 Sphere碰撞器也连接到控制器和冰上。这是第一次,因此很难使它变得容易。你能帮助我吗?预先谢谢你。
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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。