Unity 3D 残影的研究 截取当前模型的网格材质并显示

版本:unity 5.4.1  语言:C#

 

参考实战核心技术的第七章,不过只分析了其中核心的代码。

 

与之前的换装核心有点像,但此次是直接新建一个对象,只替换material、mesh两个,并没有涉及到骨骼的添加。

 

下面来看看代码:

Material mat = null;    //残影的材质
float colorA = 1f;  //残影当前的透明度

// Use this for initialization
void Start ()
{
    // 获取对象的皮肤渲染
    SkinnedMeshRenderer meshRenderer = gameObject.GetComponent<SkinnedMeshRenderer>();

    // 烘培出当前的网格
    Mesh mesh = new Mesh();
    meshRenderer.BakeMesh(mesh);

    // 新建一个残影
    GameObject go = new GameObject();
    go.hideFlags = HideFlags.HideAndDontSave;   //在Hierarchy中不显示,并保留到新场景中

    // 添加MeshFilter、MeshRenderer的情况
    //MeshFilter goMeshFilter = go.AddComponent<MeshFilter>();
    //goMeshFilter.mesh = mesh;

    //MeshRenderer goMeshRenderer = go.AddComponent<MeshRenderer>();
    //goMeshRenderer.material = meshRenderer.material;

    // 添加SkinnedMeshRenderer的情况
    SkinnedMeshRenderer goSkinnedMeshRenderer = go.AddComponent<SkinnedMeshRenderer>();
    goSkinnedMeshRenderer.material = meshRenderer.material; //添加材质
    goSkinnedMeshRenderer.sharedMesh = mesh;    //添加网格

    // 将残影放到原对象的上一格
    go.transform.position = (gameObject.transform.position + new Vector3(0, 1f, 0));
    go.transform.rotation = gameObject.transform.rotation;

    // 替换能够透明显示的Shader
    //mat = goMeshRenderer.material;
    mat = goSkinnedMeshRenderer.material;
    mat.shader = Shader.Find("JiuYinT/Toon/Basic Replace");
}
	
// Update is called once per frame
void Update ()
{
    if (mat == null)
        return;

    // 渐变消失的效果
    colorA -= Time.deltaTime;
    if (colorA <= 0f)
        colorA = 1f;
    Color col = mat.GetColor("_Color");
    col.a = colorA;
    mat.SetColor("_Color", col);
}

我用了个球做测试,不过出现了一个问题:



编辑器中正常显示,但下面的Game窗口下的显示就。。



直接变全黑了,找了组里的美工询问原因,估计是Shader的原因,换成Standard就正常了,老版本的Shader无法在新版本中使用啊。具体Shader是什么原因,我会过一段时间仔细研究一下Unity的光照、Shader系统。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值