You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.0 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Curtain : MonoBehaviour
{
public Vector3 startPos;//移动目标
public bool curState;
public float Speed;
Vector3 birthPlace;
public float scale;//缩放尺寸
float birthScalex;
int flag;//窗帘缩放方向
bool isEnd;//行为是否结束
private void Awake()
{
birthPlace = transform.position;
birthScalex = transform.localScale.x;
isEnd = true;
}
public void open() {
StartCoroutine(Run(birthPlace));
StartCoroutine(Scale(birthScalex));
}
public void close() {
StartCoroutine(Run(startPos));
StartCoroutine(Scale(scale));
}
public void onClick() {
if (!isEnd) return;
TaskCenter.GetInstance().FinishTask(2);
if (curState)
{
curState = false;
close();
}
else {
curState = true;
open();
}
isEnd = false;
}
IEnumerator Run(Vector3 tragetpos) {
Vector3 dir = tragetpos - transform.position;
while (true) {
yield return new WaitForEndOfFrame();
transform.position += dir * Speed * Time.deltaTime;
if (Vector3.Distance(tragetpos, transform.position)<=0.05f) {
isEnd = true;
break;
}
}
}
IEnumerator Scale(float targetscale)
{
while (true)
{
yield return new WaitForEndOfFrame();
float x = transform.localScale.x;
float power = targetscale - x ;
if (power > 0)
{
flag = 1;
}
else {
flag = -1;
}
x += flag * Speed * Time.deltaTime;
transform.localScale = new Vector3(x,transform.localScale.y,transform.localScale.z);
if (Mathf.Abs(power)<=0.05) {
break;
}
}
}
}