if (Input.GetKeyDown(KeyCode.R) && !isTrailActive)
{
Dash();
isTrailActive = true;
StartCoroutine(ActivateTrail(activeTime));
isTrailActive = false;
}
IEnumerator ActivateTrail(float timeActive)
{
while (timeActive > 0)
{
timeActive -= meshRefreshRate;
if(skinnedMeshRenderers == null)
{
skinnedMeshRenderers = GetComponentsInChildren<SkinnedMeshRenderer>();
}
for(int i = 0; i < skinnedMeshRenderers.Length; i++)
{
GameObject gObj = new GameObject();
gObj.transform.SetPositionAndRotation(transform.position, transform.rotation);
MeshRenderer mr = gObj.AddComponent<MeshRenderer>();
MeshFilter mf = gObj.AddComponent<MeshFilter>();
Mesh mesh = new Mesh();
skinnedMeshRenderers[i].BakeMesh(mesh);
mf.mesh = mesh;
mr.material = characterMaterial;
Destroy(gObj, meshDestroyDelay);
}
yield return new WaitForSeconds(meshRefreshRate);
}
}
public Material characterMaterial;
public string shaderVarRef;
public float shaderVarRate = 0.1f;
public float shaderVarRefreshRate = 0.05f;
IEnumerator ActivateTrail(float timeActive)
{
while (timeActive > 0)
{
timeActive -= meshRefreshRate;
if(skinnedMeshRenderers == null)
{
skinnedMeshRenderers = GetComponentsInChildren<SkinnedMeshRenderer>();
}
for(int i = 0; i < skinnedMeshRenderers.Length; i++)
{
GameObject gObj = new GameObject();
gObj.transform.SetPositionAndRotation(transform.position, transform.rotation);
MeshRenderer mr = gObj.AddComponent<MeshRenderer>();
MeshFilter mf = gObj.AddComponent<MeshFilter>();
Mesh mesh = new Mesh();
skinnedMeshRenderers[i].BakeMesh(mesh);
mf.mesh = mesh;
mr.material = characterMaterial;
StartCoroutine(AnimateMaterialFloat(mr.material, 0 ,shaderVarRate ,shaderVarRefreshRate));
Destroy(gObj, meshDestroyDelay);
}
yield return new WaitForSeconds(meshRefreshRate);
}
}
IEnumerator AnimateMaterialFloat(Material mat, float goal, float rate, float refreshRate)
{
float valueToAnimate = mat.GetFloat(shaderVarRef);
while (valueToAnimate > goal)
{
valueToAnimate -= rate;
mat.SetFloat(shaderVarRef, valueToAnimate);
yield return new WaitForSeconds(refreshRate);
}
}
리지드바디 MovePosition() 캐릭터 이동 및 점프 구현 (0) | 2024.07.17 |
---|---|
유니티 캐릭터 자동회전 방지, 물체 확인용 레이 그리기 (0) | 2024.07.17 |
유니티 시네머신 가상카메라 (0) | 2024.07.09 |
유니티 믹사모 캐릭터, 애니메이션 적용 및 수정 (0) | 2024.07.09 |
유니티 디졸브효과, 사라지는 셰이더, 은신 효과 (0) | 2024.07.07 |