SAIMA/Assets//脚本/CameraControllerInStart.cs
Roman cab00851df 短学期Log
任务:替换和实装美术素材
1.在教程场景布置图标和文字提示内容
DONE
2.制作GamePlay中背景元素的动画并实装
DONE
3.替换拆迁障碍物美术素材
DONE

任务:实装音乐和音效
1.为两个场景添加音乐,并且在GamePlay场景不重开音乐。
DONE
2.实装人摔地音效
DONE
3.实装人跑动音效
DONE
4.实装人马分离音效
DONE
5.实装创烂障碍物音效
DOING
6.实装圣火点燃音效
7.实装马磕磕碰碰音效
8.实装马似音效
9.实装马着地音效
10.实装马起跳音效

任务:实装特效
……

任务:完善没写的零散逻辑
1.在教程场景,若人马分离障碍处没接到人,过一个转场然后复位人和马
**:仍然存在问题,当如此,人的动画失效。这个问题现在不好修,等待人的死亡动画实装后再修
WAIT
2.在教程场景,点燃圣火仅有进入触发器后加载转场然后转移场景的功能,没有点燃圣火的过程,现补充其逻辑
DONE
3.开发GamePlay距离记录和重开系统
……

修复Bug
1.在教程场景,可破坏障碍物的碎片的层级不对,创烂瞬间会有层级突变的问题。在GamePlay层级,也出现了这个问题。
2.现在的高障碍实在太高了,基本有80%以上的概率导致马翻,应该调低障碍物、或者调大马的跳跃力度。
2022-08-27 02:51:21 +08:00

113 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 DG.Tweening;
using Sirenix.OdinInspector;
/// <summary>
/// 主要用于控制教程场景下,相机的阶段性移动
/// </summary>
public class CameraControllerInStart : UnitySingleton<CameraControllerInStart>
{
public enum State{None, Walk, Jump, Speed, Break, Statr}
[FoldoutGroup("信息显示")][Title("此时处于状态")][EnumPaging]
public State state = State.Walk;
[FoldoutGroup("基本参数")][Title("相机在阶段间运动需要的时间")]
public float cameraMoveDuration;
/// <summary>
/// 阶段,包含本阶段的所有信息
/// </summary>
public struct Step{
/// <summary>
/// 本阶段的名字
/// </summary>
public State name;
/// <summary>
/// 本阶段下,相机应该在哪个位置
/// </summary>
public Vector3 pos;
}
private class StepListener : MonoBehaviour
{
public Step step;
private void OnTriggerEnter2D(Collider2D other) {
if(other.TryGetComponent<Person>(out var person)){
//当检测到人进入并且此时相机正处于本状态触发相机的移动到下一个Step
if(CameraControllerInStart.Instance.state == step.name && person.state == Person.PersonState.Normal){
CameraControllerInStart.Instance.MoveToTheStep(step.name);
}
}
}
}
private Step[] steps;
private void Start() {
//初始化5个阶段的信息
steps = new Step[5];
//遍历子物体根据名称初始化Step信息
for (int i = 0; i < transform.childCount; i++) {
Transform child = transform.GetChild(i);
child.gameObject.AddComponent<StepListener>();
if (child.name == "Walk") {
steps[0].name = State.Walk;
steps[0].pos = child.position;
child.GetComponent<StepListener>().step = steps[0];
}
else if (child.name == "Jump") {
steps[1].name = State.Jump;
steps[1].pos = child.position;
child.GetComponent<StepListener>().step = steps[1];
}
else if (child.name == "Speed") {
steps[2].name = State.Speed;
steps[2].pos = child.position;
child.GetComponent<StepListener>().step = steps[2];
}
else if (child.name == "Break") {
steps[3].name = State.Break;
steps[3].pos = child.position;
child.GetComponent<StepListener>().step = steps[3];
}
else if (child.name == "Start") {
steps[4].name = State.Statr;
steps[4].pos = child.position;
child.GetComponent<StepListener>().step = steps[4];
}
}
}
/// <summary>
/// 相机运动到指定阶段的位置
/// </summary>
/// <param name="state">下一个阶段</param>
public void MoveToTheStep(State state){
Step step = State2Step(state);
Camera.main.transform.DOMoveX(step.pos.x + 44.5f, cameraMoveDuration);
this.state = ++step.name;
}
private Step State2Step(State state){
switch (state) {
case State.Walk:
return steps[0];
case State.Jump:
return steps[1];
case State.Speed:
return steps[2];
case State.Break:
return steps[3];
case State.Statr:
return steps[4];
default:
return steps[0];
}
}
}