修复Canvas大小变更时UI不随之移动错误。使用UIColorContainer来储存Color信息。

This commit is contained in:
2023-10-16 19:41:25 +09:00
parent 03267d2cf8
commit 5ccaeefa5c
13 changed files with 171 additions and 154 deletions
@@ -1,99 +0,0 @@
using DG.Tweening;
using UnityEngine;
public class StartMenuAnimations : MonoBehaviour
{
public GameObject maskObj;
public GameObject mixButton;
public GameObject attackButton;
public GameObject gotoButton;
public GameObject freeButton;
public float animeDuration = 0.2f;
public Vector3 mixDestination = new Vector3(-85, 29, 0);
public Vector3 attackDestination = new Vector3(-100, 0, 0);
public Vector3 gotoDestination = new Vector3(-115, -29, 0);
public Vector3 freeDestination = new Vector3(-130, -58, 0);
public float maskScaleX = 1;
public float maskScaleY = 0.4f;
private Vector3 mixOriginDestination;
private Vector3 attackOriginDestination;
private Vector3 gotoOriginDestination;
private Vector3 freeOriginDestination;
private PolygonCollider2D parallelogramPolygon;
private bool isMouseOverMask = false;
private void Start()
{
// get start position
mixOriginDestination = mixButton.transform.position;
attackOriginDestination = attackButton.transform.position;
gotoOriginDestination = gotoButton.transform.position;
freeOriginDestination = freeButton.transform.position;
// transform local vector3 to world vector3 by parent
mixDestination += mixButton.transform.parent.position;
attackDestination += attackButton.transform.parent.position;
gotoDestination += gotoButton.transform.parent.position;
freeDestination += freeButton.transform.parent.position;
//get polygon from maskOBJ
parallelogramPolygon = maskObj.GetComponent<PolygonCollider2D>();
// minimize mask object
MinimizeMaskObj();
}
private void Update()
{
// check if mouse is in parallelogram
if (!isMouseOverMask && parallelogramPolygon.OverlapPoint(Input.mousePosition))
{
isMouseOverMask = true;
OnMaskPointerEnter();
}
else if (isMouseOverMask && !parallelogramPolygon.OverlapPoint(Input.mousePosition))
{
isMouseOverMask = false;
OnMaskPointerExit();
}
}
private void OnMaskPointerEnter()
{
// dotween move button
mixButton.transform.DOMove(mixDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
attackButton.transform.DOMove(attackDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
gotoButton.transform.DOMove(gotoDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
freeButton.transform.DOMove(freeDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
MaximizeMaskObj();
}
private void OnMaskPointerExit()
{
// dotween move button batck to original position
mixButton.transform.DOMove(mixOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
attackButton.transform.DOMove(attackOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
gotoButton.transform.DOMove(gotoOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
freeButton.transform.DOMove(freeOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play();
MinimizeMaskObj();
}
private void MinimizeMaskObj()
{
// minimize mask object use dotween doscale
maskObj.transform.DOScaleX(maskScaleX, animeDuration).SetEase(Ease.OutCirc).Play();
maskObj.transform.DOScaleY(maskScaleY, animeDuration).SetEase(Ease.OutCirc).Play();
}
private void MaximizeMaskObj()
{
// maximize mask object use dotween doscale
maskObj.transform.DOScaleX(1, animeDuration).SetEase(Ease.OutCirc).Play();
maskObj.transform.DOScaleY(1, animeDuration).SetEase(Ease.OutCirc).Play();
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: ee00299c7bed34148860da6e69fca27a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-99
View File
@@ -1,99 +0,0 @@
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class StartUIManager : MonoBehaviour
{
public int waitTimeLimit = 45;
public GameObject sceneLoaderObj;
public GameObject startSceneDataObj;
public GameObject targetLevelProbabilityPanelOBJ;
public TextMeshProUGUI messageTextObj;
public TextMeshProUGUI waitTimeTextObj;
private SceneLoader sceneLoader;
private StartSeneData startSceneData;
private ButtonActivateColorChanger buttonActivateColorChanger;
private StartMenuProbabilityPanel startMenuProbabilityPanel;
private float startTime;
private float nowTime;
// Start is called before the first frame update
void Start()
{
sceneLoader = sceneLoaderObj.GetComponent<SceneLoader>();
startSceneData = startSceneDataObj.GetComponent<StartSeneData>();
buttonActivateColorChanger = GetComponent<ButtonActivateColorChanger>();
startMenuProbabilityPanel = targetLevelProbabilityPanelOBJ.GetComponent<StartMenuProbabilityPanel>();
messageTextObj.text = "";
buttonActivateColorChanger.InitializeAllButtonColor();
}
private void Update()
{
// update time limit left;
float leftTime = waitTimeLimit - Time.realtimeSinceStartup;
waitTimeTextObj.text = ((int)Math.Round(leftTime)).ToString();
if (leftTime <= 1)
{
// if time limit is over, load Train Scene
sceneLoader.LoadGameScene(SceneLoader.SceneType.Train);
}
}
// while StartButton-Play Pressed
public void OnPlayButtonPressed()
{
startSceneData.gameMode = 1;
sceneLoader.LoadGameScene(SceneLoader.SceneType.Play);
messageTextObj.text = "Loading Play Scene...";
}
public void OnAttackTrainButtonPressed()
{
// while Train-Attack-Button Pressed
startSceneData.attackProb = 1f;
ApplicateProbabilityToData();
LoadTrainScene();
}
public void OnGotoTrainButtonPressed()
{
// while Train-Goto-Button Pressed
startSceneData.gotoProb = 1f;
ApplicateProbabilityToData();
LoadTrainScene();
}
public void OnFreeTrainButtonPressed()
{
// while Train-Free-Button Pressed
startSceneData.attackProb = 0f;
startSceneData.gotoProb = 0f;
startSceneData.defenceProb = 0f;
LoadTrainScene();
}
public void OnMixTrainButtonPressed()
{
// while Train-Mix-Button Pressed
startSceneData.attackProb = 0.333f;
startSceneData.gotoProb = 0.333f;
LoadTrainScene();
}
private void LoadTrainScene()
{
// load Train Scene
sceneLoader.LoadGameScene(SceneLoader.SceneType.Train);
messageTextObj.text = "Loading Train Scene...";
}
private void ApplicateProbabilityToData()
{
for (int i = 0; i < startSceneData.scenePrefabSet.targetLevels[0].levelSize; i++)
{
startSceneData.gotoLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[0].singleLevelPanels[i].ProbabilityValue);
}
for(int i = 0; i < startSceneData.scenePrefabSet.targetLevels[1].levelSize; i++)
{
startSceneData.attackLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[1].singleLevelPanels[i].ProbabilityValue);
}
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 7761fd42cad2b9544a15df1264649677
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: