游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2310

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1654|回复: 56

[士郎] [Shader]弹弹弹——橡皮效果

[复制链接]  [移动端链接]
排名
3
昨日变化

6796

主题

7320

帖子

2万

积分

Rank: 16

UID
1231
好友
185
蛮牛币
7210
威望
30
注册时间
2013-7-29
在线时间
3496 小时
最后登录
2018-9-19

社区QQ达人活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

发表于 2018-9-10 11:04:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
今天玩堡垒之夜,里面敲击建筑时有橡皮那种弹弹弹的效果,挺有意思的,就写了个类似的shader,哈哈
1.1.gif
最终效果 1.2.gif

思路
  • 根据对应的坐标和范围内的顶点,根据法线进行偏移。
  • 根据时间计算偏移持续时间和反弹次数。
源代码
[AppleScript] 纯文本查看 复制代码
Shader "QQ/Elastic"
{
	Properties
	{
		_MainTex("Texture", 2D) = "white" {}
		_Position("xyz:position,w:range",vector) = (0,0,0,1)
		_Normal("xyz:normal,w:intensity",vector) = (0,1,0,0)
		_PointTime("point time",float) = 0
		_Duration("duration",float) = 2
		_Frequency("frequency",float) = 5
	}
		SubShader
		{
			Tags { "RenderType" = "Opaque" }
			LOD 100

			Pass
			{
				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				// make fog work
				#pragma multi_compile_fog

				#include "UnityCG.cginc"

				struct appdata
				{
					float4 vertex : POSITION;
					float2 uv : TEXCOORD0;
				};

				struct v2f
				{
					float2 uv : TEXCOORD0;
					UNITY_FOG_COORDS(1)
					float4 vertex : SV_POSITION;
				};

				sampler2D _MainTex;
				float4 _MainTex_ST;
				float4 _Position;
				float4 _Normal;
				float _PointTime;
				float _Duration;
				float _Frequency;
				v2f vert(appdata v)
				{
					v2f o;
					float t = _Time.y - _PointTime;
					if (t>0&&t<_Duration)
					{
						float r = 1 - saturate(length(v.vertex.xyz - _Position.xyz) / _Position.w);
						float l = 1 - t / _Duration;
						v.vertex.xyz += r * l * _Normal.xyz * _Normal.w * cos(t * _Frequency);
					}
						o.vertex = UnityObjectToClipPos(v.vertex);
						o.uv = TRANSFORM_TEX(v.uv, _MainTex);
						UNITY_TRANSFER_FOG(o, o.vertex);
					return o;
				}

				fixed4 frag(v2f i) : SV_Target
				{
					fixed4 col = tex2D(_MainTex, i.uv);
					UNITY_APPLY_FOG(i.fogCoord, col);
					return col;
				}
			ENDCG
		}
		}
}


脚本
[AppleScript] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

interface IElastic
{
    void OnElastic(RaycastHit hit);
}
[RequireComponent(typeof(MeshRenderer))]
public class ElasticObject : MonoBehaviour, IElastic
{
    private static int s_pos, s_nor, s_time;
    static ElasticObject()
    {
        s_pos = Shader.PropertyToID("_Position");
        s_nor = Shader.PropertyToID("_Normal");
        s_time = Shader.PropertyToID("_PointTime");
    }
    private MeshRenderer mesh;
    private void Start()
    {
        mesh = GetComponent<MeshRenderer>();  
    }
//调用该方法
    public void OnElastic(RaycastHit hit)
    {
        //反弹的坐标
        Vector4 v = transform.InverseTransformPoint(hit.point);
        //受影响顶点范围的半径
        v.w = 0.6f;
        mesh.material.SetVector(s_pos, v);
        //法线方向,该值为顶点偏移方向,可自己根据需求传。
        v = transform.InverseTransformDirection(hit.normal.normalized);
        //反弹力度
        v.w = 0.2f;
        mesh.material.SetVector(s_nor, v);
        //重置时间
        mesh.material.SetFloat(s_time, Time.time);
    }
}




知乎@CarefreeQ



跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
回复

使用道具 举报

3偶尔光临
167/300
排名
14775
昨日变化
589

0

主题

54

帖子

167

积分

Rank: 3Rank: 3Rank: 3

UID
206155
好友
0
蛮牛币
111
威望
0
注册时间
2017-2-12
在线时间
65 小时
最后登录
2018-9-19
发表于 2018-9-10 11:28:44 | 显示全部楼层
看到那个球...突然有个大胆的想法!学习一下!
[发帖际遇]: 齐宣王哈劳斯 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

4四处流浪
322/500
排名
11377
昨日变化
291

6

主题

154

帖子

322

积分

Rank: 4

UID
288872
好友
3
蛮牛币
315
威望
0
注册时间
2018-7-7
在线时间
82 小时
最后登录
2018-9-19
QQ
发表于 2018-9-10 13:01:05 | 显示全部楼层
老司机

回复

使用道具 举报

4四处流浪
440/500
排名
5795
昨日变化
76

0

主题

117

帖子

440

积分

Rank: 4

UID
267103
好友
0
蛮牛币
790
威望
0
注册时间
2018-1-31
在线时间
103 小时
最后登录
2018-9-19
发表于 2018-9-10 13:30:43 | 显示全部楼层
哈哈哈哈
[发帖际遇]: 学习ingNice 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

排名
18893
昨日变化
1305

0

主题

36

帖子

75

积分

Rank: 2Rank: 2

UID
295054
好友
0
蛮牛币
13
威望
0
注册时间
2018-8-29
在线时间
13 小时
最后登录
2018-9-19
发表于 2018-9-10 14:08:31 | 显示全部楼层
这个球玩儿起来非常不错

回复 支持 反对

使用道具 举报

7日久生情
2129/5000
排名
1008
昨日变化
6

1

主题

626

帖子

2129

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
56496
好友
0
蛮牛币
6356
威望
0
注册时间
2014-11-19
在线时间
482 小时
最后登录
2018-9-19
发表于 2018-9-10 14:18:21 | 显示全部楼层
真实,怕是至少要G-cup吧

回复 支持 反对

使用道具 举报

5熟悉之中
726/1000
排名
7035
昨日变化
93

0

主题

431

帖子

726

积分

Rank: 5Rank: 5

UID
254705
好友
0
蛮牛币
664
威望
0
注册时间
2017-11-16
在线时间
123 小时
最后登录
2018-9-19
发表于 2018-9-10 14:19:12 | 显示全部楼层
66666666666666666666666666666

回复 支持 反对

使用道具 举报

排名
24161
昨日变化
38

0

主题

25

帖子

48

积分

Rank: 1

UID
197071
好友
1
蛮牛币
86
威望
0
注册时间
2016-12-29
在线时间
7 小时
最后登录
2018-9-10
发表于 2018-9-10 15:45:48 | 显示全部楼层
学习了

回复

使用道具 举报

排名
33144
昨日变化
41

0

主题

4

帖子

15

积分

Rank: 1

UID
290924
好友
0
蛮牛币
28
威望
0
注册时间
2018-7-23
在线时间
3 小时
最后登录
2018-9-17
发表于 2018-9-10 16:41:56 | 显示全部楼层
厉害厉害厉害

回复

使用道具 举报

6蛮牛粉丝
1427/1500
排名
3673
昨日变化
32

2

主题

761

帖子

1427

积分

Rank: 6Rank: 6Rank: 6

UID
209046
好友
0
蛮牛币
2084
威望
0
注册时间
2017-3-30
在线时间
290 小时
最后登录
2018-9-19
发表于 2018-9-10 17:01:22 | 显示全部楼层
学习了

回复

使用道具 举报

3偶尔光临
291/300
排名
12792
昨日变化
10

11

主题

65

帖子

291

积分

Rank: 3Rank: 3Rank: 3

UID
37021
好友
0
蛮牛币
1261
威望
0
注册时间
2014-7-29
在线时间
153 小时
最后登录
2018-9-11
发表于 2018-9-10 17:41:09 | 显示全部楼层
I社员工现身说法

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1055/1500
排名
2884
昨日变化
25

1

主题

331

帖子

1055

积分

Rank: 6Rank: 6Rank: 6

UID
56245
好友
1
蛮牛币
2691
威望
0
注册时间
2014-11-18
在线时间
251 小时
最后登录
2018-9-19
发表于 2018-9-11 07:46:08 | 显示全部楼层
真是神一样的存在~

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1304/1500
排名
1764
昨日变化
12

0

主题

377

帖子

1304

积分

Rank: 6Rank: 6Rank: 6

UID
87577
好友
0
蛮牛币
4267
威望
0
注册时间
2015-3-31
在线时间
225 小时
最后登录
2018-9-19
发表于 2018-9-11 08:28:16 | 显示全部楼层
too good too strong!

回复 支持 反对

使用道具 举报

3偶尔光临
278/300
排名
9576
昨日变化
93

0

主题

77

帖子

278

积分

Rank: 3Rank: 3Rank: 3

UID
236975
好友
0
蛮牛币
487
威望
0
注册时间
2017-8-11
在线时间
94 小时
最后登录
2018-9-19
发表于 2018-9-11 08:49:23 | 显示全部楼层
{:106:}
[发帖际遇]: 一个袋子砸在了 怅然若失 头上,怅然若失 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

5熟悉之中
688/1000
排名
4943
昨日变化
1

4

主题

165

帖子

688

积分

Rank: 5Rank: 5

UID
146965
好友
0
蛮牛币
584
威望
0
注册时间
2016-4-27
在线时间
251 小时
最后登录
2018-9-11
发表于 2018-9-11 09:11:07 | 显示全部楼层

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表