Roman 74f926815e 任务:搭建前置关卡,编写演出逻辑
1.编写基督前置关卡
(1.放置平台、怪物和男童
(2.修改男童类,外加OnSaveEvent,OnSave时若有事件则触发该Event
(3.编写开幕演出,与yi前置类似
(4.编写男童解救演出
((1.触发Fungus对话
((2.对话结束后,开启通往上层的门

2.搭建村场景
(1.放置平台和元素
(2.为可动元素制作动画

3.为玩家添加static属性,进度。0:刚开,1进村,2通佛,3通伊,4.通基

4.制作死亡重开功能
(1.当玩家生命值降到0及以下,触发死亡事件
(2.死亡后reload当前场景,并设记录员,关闭某些事件和演出不再执行

*优化和修复
(1.尝试制作击中卡肉效果,目前打击感太弱。也可以尝试粒子效果

*至此,全部前置关卡搭建完毕,村场景搭建完毕。
*明天可以完成流程化,接下来就是填充剧情、UI、死亡标记和留言板等系统了

下班
2021-12-20 23:33:14 +08:00

133 lines
4.0 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 DG.Tweening;
using Sirenix.OdinInspector;
/// <summary>
/// 男童类基督Boss关的那个
/// </summary>
public class Boy : Interactive
{
// _____ _ _ _
// | __ \ | | | (_)
// | |__) | _| |__ | |_ ___
// | ___/ | | | '_ \| | |/ __|
// | | | |_| | |_) | | | (__
// |_| \__,_|_.__/|_|_|\___|
public enum State {wait, saving, OK}
/// <summary>
/// 救下一个男童需要的时间
/// </summary>
[Header("救下一个男童需要的时间")]
public float saveNeedTime;
public Event onSaveEvent;
// _____ _ _
// | __ \ (_) | |
// | |__) | __ ___ ____ _| |_ ___
// | ___/ '__| \ \ / / _` | __/ _ \
// | | | | | |\ V / (_| | || __/
// |_| |_| |_| \_/ \__,_|\__\___|
private State state;
/// <summary>
/// 救这个男童还需要多长时间
/// </summary>
[Header("救这个男童还需要多长时间")][SerializeField][ReadOnly]
private float saveNeedTimeLeft;
private YiSa yiSa;
private Animator animator;
// _____ _ _ ____ _
// / ____| | | | _ \ | |
// | | __ _| | | |_) | __ _ ___| | __
// | | / _` | | | _ < / _` |/ __| |/ /
// | |___| (_| | | | |_) | (_| | (__| <
// \_____\__,_|_|_|____/ \__,_|\___|_|\_\
void Start(){
Init();
}
void Update(){
//若处于被救中状态
if(state == State.saving){
//减少被救需要的剩余时间
saveNeedTimeLeft -= Time.deltaTime;
//判断是否已被救,若已成功被救
if(saveNeedTimeLeft < 0)
//触发被救事件
OnSave();
}
}
// _ _ _
// | \ | | | |
// | \| | ___ _ __ _ __ ___ __ _| |
// | . ` |/ _ \| '__| '_ ` _ \ / _` | |
// | |\ | (_) | | | | | | | | (_| | |
// |_| \_|\___/|_| |_| |_| |_|\__,_|_|
private void Init(){
//找到必须的组件和游戏物体
yiSa = FindObjectOfType<YiSa>();
animator = GetComponent<Animator>();
//初始化救这个男童需要的剩余时间
saveNeedTimeLeft = saveNeedTime;
}
/// <summary>
/// 成功被救的时候触发
/// </summary>
private void OnSave(){
//修改状态至OK
state = State.OK;
//通知主人自己已被救
if(yiSa != null) yiSa.OnSave(this);
//通知玩家自己已被救
FindObjectOfType<MyPlayer>().OnSave(this);
//播放被救动画
animator.SetBool("isSaving",true);
//如果有,则触发外接被救事件
if(onSaveEvent != null) onSaveEvent.OnCall();
}
// ______ _
// | ____| | |
// | |____ _____ _ __ | |_
// | __\ \ / / _ \ '_ \| __|
// | |___\ V / __/ | | | |_
// |______\_/ \___|_| |_|\__|
/// <summary>
/// 当玩家对男童使用交互
/// </summary>
public override void OnCall(){
//只有当自己还在等待的时候,才能触发被救
if(state == State.wait)
//修改自身状态至saving
state = State.saving;
}
/// <summary>
/// 当玩家抬起交互键的时候触发
/// </summary>
public override void OnCallCancel(){
if(state == State.saving){
Debug.Log("救人中断了");
state = State.wait;
saveNeedTimeLeft = saveNeedTime;
}
}
/// <summary>
/// 当玩家离开catching范围时触发
/// </summary>
public override void OnLeave(){
//如果正在救,则触发玩家的中断事件
if(state == State.saving){
FindObjectOfType<MyPlayer>().OnInteractiveException();
}
}
public override int RetuenState(){
return (int)state;
}
}