Browse Source

小卡牌预制体

pull/25/head
45 1 year ago
parent
commit
91cb8d02c0
  1. 2
      ColorlessWorld-2024-4-2/Assets/Image/Materials/7尤利乌斯-2D-待机动作-试gif.mat
  2. 8
      ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/CardSmall.meta
  3. 19
      ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/Card_v01.prefab
  4. 12334
      ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity
  5. 315
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs
  6. 14
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOnMouseEnter.cs
  7. 8
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardSmall.meta
  8. 59
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardSmall/CardSmall.cs
  9. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardSmall/CardSmall.cs.meta
  10. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs
  11. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyManager.cs.meta
  12. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs.meta
  13. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs.meta
  14. 51
      ColorlessWorld-2024-4-2/Assets/Scripts/UI/CardActiveSort/CardActiveSort.cs

2
ColorlessWorld-2024-4-2/Assets/Image/Materials/7尤利乌斯-2D-待机动作-试gif.mat

@ -49,7 +49,7 @@ Material:
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: b738de9a1a797b3438a0f86f45a7d9a2, type: 3}
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:

8
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/CardSmall.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5554cccb37d406243933d41534f56ab6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

19
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/Card_v01.prefab

@ -311,9 +311,9 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@ -542,9 +542,9 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@ -905,12 +905,13 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 80971e1d1b78104439c3472d4276e502, type: 3}
m_Name:
m_EditorClassIdentifier:
follow: 0
originalParent: {fileID: 0}
originalpoint: {x: 0, y: 0, z: 0}
originalScale: {x: 0, y: 0, z: 0}
eventSystem: {fileID: 0}
ainPanle: {fileID: 1075869202937435496}
currentNode: {fileID: 0}
dragState: 3
castingPool: []
layerMask:
serializedVersion: 2
@ -1008,9 +1009,9 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@ -1083,9 +1084,9 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []

12334
ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity

File diff suppressed because it is too large

315
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs

@ -4,8 +4,6 @@ using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using static EnemyNode;
using static UnityEngine.Rendering.DebugUI;
using System;
using Unity.VisualScripting;
using System.Data;
@ -15,12 +13,11 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
// public Vector3 OriginTransform;
//private Vector3 EndTransform;
[Header("拖拽参数")]
public bool follow;
public Transform originalParent;
public Vector3 originalpoint;
public EventSystem eventSystem;
bool canUse = true;//决定卡牌是否可以释放
public bool canUse = true;//决定卡牌是否可以释放
bool choosed;//标识卡牌是否被选中
[Header("贝塞尔曲线瞄准")]
@ -29,12 +26,25 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
[Header("影响格参数")]
public MapUnity currentNode;//瞄准的格子
[Header("卡牌拖拽状态")]
public CardDragState dragState = CardDragState.noDrag ;
public enum CardDragState
{
onBeginDrag,
onDrag,
onEndDrag,
noDrag
}
PointerEventData eventData;
List<RaycastResult> result = new List<RaycastResult>();
//[Header("卡牌属性")]
private CardEntity cardEntity;
public bool ready;//是否已到达可释放位置
[Header("卡牌属性")]
public List<MapUnity> castingPool;//卡牌打出范围
private CardEntity cardEntity;
[Header("射线图层剔除")]
public LayerMask layerMask;
@ -43,6 +53,11 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
void Start()
{
originalParent = gameObject.transform.parent;
dragState = CardDragState.noDrag;
eventSystem = GameObject.FindObjectOfType<EventSystem>();
eventData = new PointerEventData(eventSystem);
cardOnMouseEnter = GetComponent<CardOnMouseEnter>();
eventSystem = GameObject.FindObjectOfType<EventSystem>();
@ -54,7 +69,177 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
{
handleRightClickCancel();
if (dragState != CardDragState.noDrag && dragState != CardDragState.onDrag)
{
//UI射线检测
eventData.position = Mouse.current.position.value;
eventSystem.RaycastAll(eventData, result);
if (result.Count > 0)
{
Debug.Log(result[0].gameObject.name);
}
}
switch (dragState)
{
case CardDragState.onBeginDrag:
if(choosed ==false )
{
TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.useCard;
CardChoose(eventData);
dragState = CardDragState.onDrag;
}
break;
case CardDragState.onDrag:
CardFollow();
if (Mouse.current.leftButton.wasReleasedThisFrame && ready)
{
dragState = CardDragState.onEndDrag;
}
break;
case CardDragState.onEndDrag:
TurnMaster.Instance.playerAction = TurnMaster.PlayerAction.none;
CardUse();
break;
case CardDragState.noDrag:
if (Mouse.current.leftButton.wasReleasedThisFrame && GameManager.Instance.onDrag == false)
{
eventData.position = Mouse.current.position.value;
eventSystem.RaycastAll(eventData, result);
if (result.Count > 0)
{
Debug.Log(result[0].gameObject.name);
if (result[0].gameObject == this.gameObject)
{
dragState = CardDragState.onBeginDrag;
GameManager.Instance.onDrag = true;
}
}
}
break;
}
}
//卡片动作
//开始选中
public void CardChoose(PointerEventData eventData)
{
banActionCardCheck();
disArmCheck();
costCheck();
disCardCheck();
if (!cardEntity.canUse)
{
return;
}
choosed = true;
GetComponent<CanvasGroup>().blocksRaycasts = false;
originalpoint = this.transform.localPosition;
transform.SetParent(transform.parent.parent);
transform.position = eventData.position;
GetComponent<RectTransform>().localScale = cardOnMouseEnter.targetScale;
//根据卡牌数据决定是否调用曲线
if (cardEntity.cardOriginalData.CastingRange != 0)
{
//释放范围为0则不需要调用曲线
ainPanle.SetActive(true);
}
else
{
ainPanle.SetActive(false);
}
}
//拖拽中
public void CardFollow()
{
if (!cardEntity.canUse)
{
return;
}
dyeing();
eventData.position = Mouse.current.position.value;
eventSystem.RaycastAll(eventData, result);
Debug.Log(result[0].gameObject.name);
if (result.Count > 0)
{
if(result[0].gameObject.name == "TotalPanel")
{
if( ready == false)
{
ready = true;
}
transform.position = cardOnMouseEnter.originPoint;
if (cardEntity.cardOriginalData.CastingRange != 0)
{
ainPanleWork(eventData);
}
else
{
noAinPanleWork(eventData);
}
}
else
{
if(ready ==true )
{
resetComponentPosition();
}
else
{
transform.position = eventData.position;
}
}
}
// if (eventData.pointerCurrentRaycast.gameObject.name == )
// {
// follow = false;
// }
// else
// {
// follow = true;
// }
// if (follow == true)
// {
// transform.position = eventData.position;
// }
// else
// {
// transform.position = CardActiveSort.Instance.preparePoint.transform.position;
// }
}
//卡牌释放
public void CardUse()
{
GameManager.Instance.onDrag = false;
if (canUse)
{
CardActiveSort.Instance.ReflashCardPoint();
StartCoroutine(OnDragIEnumerator(eventData));
}
else
{
canUse = true;
resetComponentPosition();
}
}
//检查卡牌的费用是否可以释放
private void costCheck()
{
@ -157,13 +342,17 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
}
cardEntity.influencePreviewPool.Clear();
ready = false;
GameManager.Instance.onDrag = false;
dragState = CardDragState.noDrag;
choosed = false;
canUse = true;//取消释放
ainPanle.SetActive(false);
//其他位置都归位
transform.SetParent(originalParent);
GetComponent<CanvasGroup>().blocksRaycasts = true;
transform.localScale = new Vector3(1f, 1f, 1f);
// transform.position = originalpoint;
// CardActiveSort.Instance.ReflashCardPoint();
return;
}
@ -172,49 +361,14 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
{
if (choosed && Mouse.current.rightButton.wasPressedThisFrame)
{
GameManager.Instance.onDrag = false;
Debug.Log("取消释放");
canUse = false;//取消释放
ainPanle.SetActive(false);
{
resetComponentPosition();
}
}
public void OnBeginDrag(PointerEventData eventData)
{
// if (GameObject.Find("CardPanel") != null)
// graphicRaycaster = GameObject.Find("CardPanel").GetComponent<GraphicRaycaster>();
banActionCardCheck();
disArmCheck();
costCheck();
disCardCheck();
if (!cardEntity.canUse)
{
return;
}
GameManager.Instance.onDrag = true;
choosed = true;
GetComponent<CanvasGroup>().blocksRaycasts = false;
originalParent = this.gameObject.transform.parent;
originalpoint = this.transform.localPosition;
transform.SetParent(transform.parent.parent);
transform.position = eventData.position;
GetComponent<RectTransform>().localScale = cardOnMouseEnter.targetScale;
//根据卡牌数据决定是否调用曲线
if (cardEntity.cardOriginalData.CastingRange != 0)
{
//释放范围为0则不需要调用曲线
ainPanle.SetActive(true);
}
else
{
ainPanle.SetActive(false);
}
dragState = CardDragState.onBeginDrag;
}
private void ainPanleWork(PointerEventData eventData)
@ -358,38 +512,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
public void OnDrag(PointerEventData eventData)
{
if (!cardEntity.canUse)
{
return;
}
if (cardEntity.cardOriginalData.CastingRange != 0)
{
ainPanleWork(eventData);
}
else
{
noAinPanleWork(eventData);
}
dyeing();
Debug.Log(eventData.pointerCurrentRaycast.gameObject.name);
if (eventData.pointerCurrentRaycast.gameObject.name == "TotalPanel")
{
follow = false;
}
else
{
follow = true;
}
if (follow == true )
{
transform.position = eventData.position;
}
else
{
transform.position = CardActiveSort .Instance .preparePoint .transform .position ;
}
}
private void dyeing()
@ -405,9 +528,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
public void OnEndDrag(PointerEventData eventData)
{
GameManager.Instance.onDrag = false;
StartCoroutine(OnDragIEnumerator(eventData));
}
private IEnumerator OnDragIEnumerator(PointerEventData eventData)
@ -431,41 +552,23 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
//先判断该卡牌的类型是否是需要范围
if (cardEntity.cardOriginalData.CastingRange != 0)
{
//检测碰撞的地图节点是否被影响(可释放)
if (currentNode == null || currentNode.influenced == false)
if(currentNode != null&& currentNode.influenced)
{
//遍历范围预览池消除影响色(红色,卡牌的释放范围)
foreach (MapUnity mapUnity in MapUnityManager.Instance.castPool)
{
mapUnity.influenced = false;
}
MapUnityManager.Instance.castPool.Clear();
}
else if (currentNode.influenced)
{
//卡牌释放效果
yield return StartCoroutine(cardEntity.settle(0));
}
cardEntity.influencePreviewPool.Clear();
GetComponent<CanvasGroup>().blocksRaycasts = true;
//其他位置都归位
transform.SetParent(originalParent);
transform.localPosition = originalpoint;
yield break;
else
{
resetComponentPosition();
}
}//范围类,需要指定被影响的节点才能释放
else
{
//卡牌释放效果
yield return StartCoroutine(cardEntity.settle(0));
yield break;
}//无范围类,直接释放
}//无范围类,直接释放
yield break;
}
else
{

14
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOnMouseEnter.cs

@ -5,6 +5,8 @@ using UnityEngine.EventSystems;
public class CardOnMouseEnter : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public int oringinIndex;
[Header("Êó±êʼþ¿ØÖÆ")]
public CardDrag cardDrag;
@ -20,8 +22,6 @@ public class CardOnMouseEnter : MonoBehaviour, IPointerEnterHandler, IPointerExi
public float moveOffset =100;
// private Transform originParent;
public int thisIndexInIndex;
public Vector3 originPoint;
public Vector3 UpperOffset;
@ -67,11 +67,9 @@ public class CardOnMouseEnter : MonoBehaviour, IPointerEnterHandler, IPointerExi
IEnumerator ZoomBig()
{
thisIndexInIndex = transform.GetSiblingIndex();
transform.position += UpperOffset;
OffsetOtherCard(thisIndexInIndex);
OffsetOtherCard(oringinIndex);
transform.SetAsLastSibling();
while (Vector3.Distance(transform.localScale, targetScale) > 0.1)
@ -84,12 +82,12 @@ public class CardOnMouseEnter : MonoBehaviour, IPointerEnterHandler, IPointerExi
}
IEnumerator ZoomSmall()
{
transform.SetSiblingIndex(thisIndexInIndex);
{
transform.SetSiblingIndex(oringinIndex);
transform.position = originPoint ;
ComebackOtherCard(thisIndexInIndex);
ComebackOtherCard(oringinIndex);
while (Vector3.Distance(transform.localScale, originScale) > 0.1)
{

8
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardSmall.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 25d15c8d258a08846bd310f872589d21
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

59
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardSmall/CardSmall.cs

@ -0,0 +1,59 @@
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEditor;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class CardSmall : MonoBehaviour
{
public GameObject praticleSystem;
public Camera mainCaera;
public GameObject destination;//目的地
public Vector3 destinationPos;
public Vector3 startPos;//起始位置
public float time;
[Header("速度")]
public float speed;
public float rotationSpeed;
[Header("图层剔除")]
public LayerMask layerMask;
private void Start()
{
float x = destination.transform.position.x;
float y = destination.transform.position.y;
Vector2 positonUItoScreen = new Vector2(x, y);
Ray ray = mainCaera.ScreenPointToRay(positonUItoScreen);
if (Physics.Raycast(ray, out RaycastHit raycastHit))
{
Debug.Log(raycastHit.collider.gameObject.name + raycastHit.point);
destinationPos = raycastHit.point;
}
startPos = transform.position;
}
private void Update()
{
this.transform.position = Vector3.Lerp(transform.position, destinationPos, time += Time.deltaTime * speed);
Vector3 direction = destinationPos - transform.position;
float angle = Vector3.SignedAngle(transform.forward, direction, transform.up);
transform.eulerAngles = Vector3.Lerp(transform.eulerAngles,new Vector3 (0, angle, 0 ),Time.deltaTime *rotationSpeed );
if (Vector3 .Distance (transform.position, destinationPos)<0.1)
{
Destroy(this.gameObject);
}
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardSmall/CardSmall.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7ba86530fb52a2a4e8706eb2f0e9f094
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

2
ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs

@ -267,6 +267,8 @@ public class TurnMaster : Singleton<TurnMaster>
handCard.cardEntityList.Add(cardEntity);
}
}
CardActiveSort.Instance.ReflashCardPoint();
}
}
/* public void ShuffleWithoutLosingCards()

2
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyManager.cs.meta

@ -4,7 +4,7 @@ MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 15
executionOrder: 30
icon: {instanceID: 0}
userData:
assetBundleName:

2
ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs.meta

@ -4,7 +4,7 @@ MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 5
executionOrder: 15
icon: {instanceID: 0}
userData:
assetBundleName:

2
ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs.meta

@ -4,7 +4,7 @@ MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 8
executionOrder: 18
icon: {instanceID: 0}
userData:
assetBundleName:

51
ColorlessWorld-2024-4-2/Assets/Scripts/UI/CardActiveSort/CardActiveSort.cs

@ -14,20 +14,19 @@ public class CardActiveSort : Singleton <CardActiveSort>
public GameObject preparePoint;
[Header ("¿¨ÅÆÎ»ÖÃ")]
public List<CardPointData> cardPointDataList= new List<CardPointData>();//ÆæÊý
public List<CardPointData> cardPointDataListEven = new List<CardPointData>();//żÊý
public List<CardPointData> cardOringinPointDataList= new List<CardPointData>();
void Update()
{
if(transform .childCount !=cardCount && transform .childCount >1)
if(transform .childCount > cardCount && transform .childCount >1)
{
ReflashCardPoint();
cardCount = this.transform.childCount;
}
// if(transform.childCount < cardCount)
// {
// cardCount = this.transform.childCount;
// }
if(transform.childCount < cardCount)
{
cardCount = this.transform.childCount;
}
}
public void ReflashCardPoint()
{
@ -64,9 +63,8 @@ public class CardActiveSort : Singleton <CardActiveSort>
Vector3 direction = targrtPoint.transform.position- cardEntitieList[i].transform.position;
float angle = Vector3.SignedAngle(-cardEntitieList[i].transform.up, direction, cardEntitieList[i].transform.forward);
cardEntitieList[i].transform.Rotate(0, 0, angle);
cardEntitieList[i].transform.Rotate(0, 0, angle);
}
//ÖØÖóõʼλÖÃ
foreach (var card in cardEntitieList)
{
@ -75,13 +73,44 @@ public class CardActiveSort : Singleton <CardActiveSort>
cardOnMouseEnte.originRotation = cardOnMouseEnte.GetComponent <RectTransform >().eulerAngles;
cardOnMouseEnte.oringinIndex = cardOnMouseEnte.transform.GetSiblingIndex();
}
}
public void ReflashCardPointWithSave()
{
List<RectTransform> cardEntitieList = new List<RectTransform>();
for (int i = 0; i < transform.childCount; i++)
{
cardEntitieList.Add(transform.GetChild(i).GetComponent<RectTransform>());
}
//Í£Ö¹ÒÆ¶¯
foreach (var card in cardEntitieList)
{
CardOnMouseEnter cardOnMouseEnte = card.GetComponent<CardOnMouseEnter>();
cardOnMouseEnte.StopAllCoroutines();
}
Debug.Log("ÅÅÐò-Save");
for (int i = 0; i < cardEntitieList.Count; i++)
{
cardEntitieList[i].transform.position = cardOringinPointDataList[i].originPoint;
cardEntitieList[i].transform.eulerAngles = cardOringinPointDataList[i].originRotation;
}
}
[System .Serializable ]
public class CardPointData
{
public Vector2 pivot;
public float rotationZ;
public Vector3 originPoint;
public Vector3 originRotation;
}
public CardPointData CreateCardPointData (Vector3 originPoint,Vector3 originRotation)
{
CardPointData currentCardPointData = new CardPointData();
currentCardPointData.originPoint = originPoint;
currentCardPointData.originRotation = originRotation;
return currentCardPointData;
}
}

Loading…
Cancel
Save