
1.实装玩家回头查看老兵出发对话的情节 2.降低了打开电报机音效的音量 3.更换第二段CG,实现淡入淡出效果 4.当玩家还没修完电话线就和电报机互动,触发对话【没修完呢】 5.将新的出字音效实装到每一个场景 6.解决如果玩家投掷过快会导致无法退出投掷状态的Bug 7.实装大部分BGM 8.给序章战场的假电报机也加上没连完线的对话 9.新增开发者捷径,如果输入。。--。直接判定打完全部句子 (*:建议把碉堡发令员的指挥做成动态的 (*:第二关的炮火已经越来越好了,但是目前只有炮火,晚上肯定也会开枪吧?希望增加一些随机快速闪烁的光源表示晚上的枪。 (*目前碉堡音效出现和消失得十分突然,建议在首尾稍微加一些淡入淡出效果 (*:建议把倒地后的机枪手也加上调查对话 xx:人声问题请待定,加上音乐后好像又不是很违和了 (*:碉堡警告音效系统做完了,但是人声感觉上非常奇怪,建议修改 (*:敌人被石头吸引系统实装完成,但是很突兀,建议还是不要出现语言了 接下来的任务: 1.实装按键引导 2.更换投掷物堆系统为火堆系统 3.实装第二关最后追逐关卡 4.制作开始界面 5.制作Thanks 4 Play 能看到效果的努力,这回有动力了吧?加油吧
98 lines
3.9 KiB
C#
98 lines
3.9 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.InputSystem;
|
||
using Cinemachine;
|
||
using UnityEngine.InputSystem.Processors;
|
||
|
||
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;
|
||
|
||
public AudioSource deadAudio;
|
||
|
||
|
||
|
||
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;
|
||
deadAudio.Play();
|
||
//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;
|
||
FindObjectOfType<Veteran>().isDead = true;
|
||
//9.标记自己已经被触发过
|
||
hasBeenOnCall = true;
|
||
parallax.canParallax = true;
|
||
}
|
||
|
||
void OnTriggerEnter2D(Collider2D other)
|
||
{
|
||
if(other.tag == "Player")
|
||
{
|
||
//当玩家进入事件范围内
|
||
if(!hasBeenOnCall)StartCoroutine("SelfOnCall");
|
||
}
|
||
}
|
||
}
|