效果图
因为csdn有图片大小限定,所以适当减去了点。
图中效果为:能量护盾的收缩,以及与外界collider的碰撞交互效果。
准备模型(BLENDER)
使用Blender制作一个棱角球。
点开插件面板添加一个tissue插件
添加后,点击插件面板这个按钮
就能得到这样的网格了
重置uv
网格由五边面和六边面构成,调整uv布局
选中所有的无边面,调整所有的五边面uv布局为左下角,再ctrl+i反选,调整六边面在右上角(uv面板中g移动,s缩放等操作依然适用)
然后导出uv布局图
制作表面贴图(PS)
uv布局图起始效果如下
使用色彩范围选中黑色边缘,在新建图层中填充(可以使用快捷键ctrl+delete填充前景色)为白色。
再反选,新建图层作为背景,填充为黑色。得到如下效果
双击白边所在图层,进入图层样式编辑,选择外发光调整至合适发光边缘
导出贴图放入Unity
实现效果代码
shader方面就是菲涅尔+顶点动画(使用了_SinTime达到波动效果)+HDR颜色模式(在属性名前面加上[HDR]即可)
关键是如何实现互动。
给棱角球加上一个互动脚本,当碰撞发生时(碰撞发生条件是双方都有collider,其中至少一方含有rigbody组件),传入碰撞点的信息到shader中,在shader中比较当前顶点距离碰撞点的距离,使用smoothstep把距离限制在0-1之间,还能根据参数调整遮罩边缘,再把这个距离值乘上一层护盾颜色。
以下为互动脚本:
using UnityEngine;
public class InteractSphere : MonoBehaviour
{
public Material material;
private void OnCollisionEnter(Collision other)
{
material.SetVector("_InteractPoint", other.contacts[0].point);
material.SetFloat("_Toggle"