
任务:替换和实装美术素材 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%以上的概率导致马翻,应该调低障碍物、或者调大马的跳跃力度。
113 lines
3.7 KiB
C#
113 lines
3.7 KiB
C#
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];
|
||
}
|
||
}
|
||
|
||
}
|