Warcorrespondents/Assets/Scripts/事件/VeteranSacrifice.cs
SAIPO 9a2bbd153c 1.添加了航弹爆炸的火光闪烁与爆炸时的立体声
2.添加了三个关卡的视差效果
3.添加了第一关的机枪兵的开枪时的火光
4.实装了第二关的挡板遮挡灯光效果
5.增加了第一关中的大型烟雾
6.实装了第二关的水面反射
(以上更改均有或多或少修改程序的代码)
7.增加了玩家脚底的跑动灰尘效果
8.增加了战场上时不时飘过的黑色烟雾(有时可能有些违和)
2021-09-07 22:08:56 +08:00

93 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using Cinemachine;
public class VeteranSacrifice : Event
{
//事件:老兵牺牲
private CinemachineVirtualCamera M_Camera;//虚拟相机组件
private Vector3 origin;//原始相机追踪偏移量
private CinemachineTransposer cinemachineTransposer;//相机追踪数据结构
private Vector3 target;//目标偏移量,通过修改这个达到转移镜头的目的
[Tooltip("请填入镜头移动的速度")]
public float speed;
[Tooltip("要召唤,得先有,对吧?拖进炮弹的预制体")]
public GameObject shell;
[Tooltip("召唤的炮弹需要知道自己属于哪个轰炸区,请拖入其轰炸区")]
public BombingArea bombingArea;
private bool hasBeenOnCall;//记录事件是否被触发的变量
public WVParallax parallax;
void Start()
{
M_Camera = FindObjectOfType<CinemachineVirtualCamera>();
cinemachineTransposer = M_Camera.GetCinemachineComponent<CinemachineTransposer>();
target = cinemachineTransposer.m_FollowOffset;
origin = target;
}
void FixedUpdate()
{
if(!target.Equals(cinemachineTransposer.m_FollowOffset))//当没到目标的时候才移动
{
//每帧都要使得相机的offset向目标移动
cinemachineTransposer.m_FollowOffset += (target - cinemachineTransposer.m_FollowOffset)*//目标偏移量
Time.fixedDeltaTime*//使其与时间无关
speed;//乘以速度
}
}
public IEnumerator SelfOnCall()
{
parallax.canParallax = false;
//1.关闭玩家操作地图
FindObjectOfType<PlayerInput>().SwitchCurrentActionMap("NullMap");
//*让老兵转个身防止牺牲后穿模
FindObjectOfType<Veteran>().transform.localScale = new Vector3(
//x
FindObjectOfType<Veteran>().transform.localScale.x*-1,
//y
FindObjectOfType<Veteran>().transform.localScale.y,
//z
FindObjectOfType<Veteran>().transform.localScale.z
);
//2.移动相机至老兵位置
target = new Vector3(-19.8600006f,-0.600000024f,-10f)*3;
//3.召唤一颗导弹在老兵头顶
Shell thisShell = Instantiate(shell,new Vector3(46.9799995f,10.01999998f,0),Quaternion.identity).
GetComponent<Shell>();
thisShell.M_BombingArea = bombingArea;
thisShell.YouAreSpecal();
// //4.打开老兵的碰撞体,等待播放完毕老兵死亡动画
// FindObjectOfType<Veteran>().GetComponent<BoxCollider2D>().isTrigger = false;
//*修改给炸弹的爆炸瞬间在此给这个炸弹赋予Animator的值然后在事件中触发对象的死亡动画
thisShell.target = FindObjectOfType<Veteran>().GetComponentInChildren<Animator>();
//5.若干秒后,使镜头返回主角,顺便让主角转个身
yield return new WaitForSeconds(5f);
FindObjectOfType<M_Player>().TurnAround();
target = origin;
//7.恢复玩家操作地图
FindObjectOfType<PlayerInput>().SwitchCurrentActionMap("PlayerNormal");
//8.关闭老兵碰撞体方便玩家回头查看
FindObjectOfType<Veteran>().GetComponent<BoxCollider2D>().isTrigger = true;
//9.标记自己已经被触发过
hasBeenOnCall = true;
parallax.canParallax = true;
}
void OnTriggerEnter2D(Collider2D other)
{
if(other.tag == "Player")
{
//当玩家进入事件范围内
if(!hasBeenOnCall)StartCoroutine("SelfOnCall");
}
}
}