FFVII-TacticalMode
VFX实现的火花特效
Smash-CSS
Superhot-BulletTime
实现了子弹时间,以及肢体破碎效果。
- 肢体破碎:
1.破碎的肢体上挂载一个脚本,当子弹OnCollisionEnter时,取到打中的这个部件,让它隐藏掉(不是让它消失,因为后面会给它一个力让它产生爆炸效果),并根据预制体创建出相同的物体。
2.获得这个创建出物体上所有Rigidbody,给它们添加爆炸的力
foreach(Rigidbody r in rbs)
{
r.interpolation = RigidbodyInterpolation.Interpolate;
r.AddExplosionForce(15, transform.position, 5);
}
rb.AddExplosionForce(15, transform.position, 5);
- Ragdoll
获得骨骼刚体,设置isKinematic = false即可。( r.interpolation = RigidbodyInterpolation.Interpolate;)
RDR-DeadEye
- 右键瞄准屏幕变色(后处理方式 + DOTween.DOVirtual)
右击事件,执行一次DOVirtual(from, to, time, Callback(float));
变色:PostProcessProfile.GetSetting<ColorGrading>().colorFilter.value - 获得目标点在屏幕上的位置,实时更新图标
Camera.main.WorldToScreenPoint(target.position); - 依次射击目标点(DOTween.Sequence,类似行为树节点)
for (int i = 0; i < targets.Count; i++)
{
s.Append(transform.DOLookAt(targets[i].GetComponentInParent<EnemyScript>().transform.position, .05f).SetUpdate(true));
s.AppendCallback(() => anim.SetTrigger("fire"));
int x = i;
s.AppendInterval(.05f);
s.AppendCallback(()=>FirePolish());
s.AppendCallback(() => targets[x].GetComponentInParent<EnemyScript>().Ragdoll(true, targets[x]));
s.AppendCallback(() => crossList[x].GetComponent<Image>().color = Color.clear);
s.AppendInterval(.35f);
}
s.AppendCallback(() => Aim(false));
s.AppendCallback(() => DeadEye(false));
- 给刚体加一个射击方向的力
point.GetComponent<Rigidbody>().AddForce(shooter.transform.forward * 30, ForceMode.Impulse);
Pokemon-Capture
播片,宝可梦法球
Overwatch-Dragonstrike
龙柱特效
MonumentValley-LevelDesign
较为复杂,先跳过
MGR-BladeMode
用到了一个切割插件EasySlice,切割传递的参数是要切割的物体和切割用的plane面片
- Physics.Overlap来模拟plane面片是否碰到物体
KingdomHearts-ShotLock
- 通过CapsuleCollider的OnTriggerEnter检测新的东西
- 螺旋炮弹的飞行方式:
1.沿着自己的y轴向作转圈运动
2.朝向目标旋转飞行transform.eulerAngles += Vector3.forward * Time.deltaTime; transform.position += transform.up * Time.deltaTime;
炮弹的构成是一共三层:最外层作为碰撞的本体,朝着目标直直飞过去;第二层控制本地旋转,来旋转拖尾;第三层则将localPosition的Y值调出去,这样就可以朝着目标旋转飞行了。var targetRotation = Quaternion.LookRotation(target.transform.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, .5f); //transform.LookAt(target.position); transform.position += transform.forward * Time.deltaTime * (movementSpeed * multiplier); transform.GetChild(0).eulerAngles += Vector3.forward * Time.deltaTime * rotationSpeed * 1.5f;
transform.GetChild(0).GetChild(0).DOLocalMoveY(5, 1f);
GodofWar-AxeThrow
-
Throw
1.自身旋转:transform.localEulerAngles += V3.forward * rotattionSpeed * Time.deltaTime; -
Pullback
1.二阶贝塞尔曲线(见之前文章)
2.Cinemachine Shake:CinemachineImpulseSource.GenerateImpulse(Vector3.right);
网友评论