This commit is contained in:
shurongsen 2024-12-04 02:09:23 +08:00
parent 3a6e7aae2b
commit 4ce38f4a0b
16 changed files with 494 additions and 0 deletions

99
Fun.cs Normal file
View File

@ -0,0 +1,99 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
public enum DamageType
{
physicalDamage,//物理伤害
magicDamage,//魔法伤害
noAttributeDamage,//无属性伤害
}
//public class prefabObjects
//{
// public string targetAudience = "targetAudience";
// public string myPalye = "myPalye";
//}
public class BUff
{
public float timeLeft = 0;//剩余时间
public float executionInterval = 0;//buff执行间隔
public float executionInterval_max = 100;//buff执行间隔
public Action<object[]> Funaction;//调用的函数
public object[] value;//调用函数的值
}
public class Fun : Base
{
//// 通过方法名调用对应的方法
//public void CallMethodByName(string methodName)
//{
// // 获取当前类的Type
// Type type = this.GetType();
// // 获取方法信息
// MethodInfo methodInfo = type.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
// if (methodInfo != null)
// {
// // 调用该方法
// methodInfo.Invoke(this,null ); // null代表无参数
// }
// else
// {
// Debug.LogError("方法未找到: " + methodName);
// }
//}
/// <summary>
/// 中毒 //目标 // 自己
/// </summary>
/// <param name="objects"></param>
public void poisoning(object[] objects)
{
Palye targetAudience = (Palye)objects[0];
Palye myPalye = (Palye)objects[1];
Debug.Log("触发中毒");
Debug.Log(myPalye.name);
}
/// <summary>
/// 扣血 传入参数 目标,伤害值,攻击类型,使用者
/// </summary>
/// <param name="objects"></param>
public void bloodLoss(object[] objects)//目标,伤害值,攻击类型,使用者
{
Palye targetAudience = (Palye)objects[0];
float harm = (float)objects[1];
DamageType damageType = (DamageType)objects[2];
Palye UserObj = (Palye)objects[3];
float finalDamage = harm;
switch (damageType)
{
case DamageType.physicalDamage://物理伤害
finalDamage -= targetAudience.physicalArmor;
break;
case DamageType.magicDamage://魔法伤害
finalDamage -= targetAudience.magicArmor;
break;
case DamageType.noAttributeDamage://无属性伤害
finalDamage -= 0;
break;
}
if (finalDamage < 0)
{
finalDamage = 0;
}
targetAudience.Hp -= finalDamage;
}
}

11
Fun.cs.meta Normal file
View File

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

25
Global.cs Normal file
View File

@ -0,0 +1,25 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Global : MonoBehaviour
{
//public class FuncClass
// {
// public string Name;
// public List<string> Value;
// public FuncClass(string _Name, List<string> _Value)
// {
// Name = _Name;
// Value = _Value;
// }
// }
//public Dictionary<string, List<FuncClass>> funcClasses = new List<FuncClass>
//{
// new FuncClass("poisoning",new List<string>{
// })
//};
}

11
Global.cs.meta Normal file
View File

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

8
base.meta Normal file
View File

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

34
base/EventPopUp.cs Normal file
View File

@ -0,0 +1,34 @@
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
public class EventPopUp : MonoBehaviour
{
public string text = "";
public Image Image;
public Text textobg;
public float time = 5f;
async void Start()
{
Canvas canvas = GetComponentInParent<Canvas>();
float canvasHeight = canvas.GetComponent<RectTransform>().rect.height;
transform.DOMoveY(canvasHeight - (canvasHeight*0.3f), 1.5f);
await Task.Delay(500);
Image.DOColor(new Color(1f, 1f, 1f, 0f), time);
textobg.DOColor(new Color(1f, 1f, 1f, 0f), time);
await Task.Delay(5100);
Destroy(gameObject);
}
// Update is called once per frame
void Update()
{
if (textobg != null)
{
textobg.text = text;
}
}
}

11
base/EventPopUp.cs.meta Normal file
View File

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

66
base/ImageLoader.cs Normal file
View File

@ -0,0 +1,66 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System.Threading.Tasks;
public class ImageLoader : MonoBehaviour
{
// 缓存字典
private Dictionary<string, Sprite> imageCache = new Dictionary<string, Sprite>();
//private async void Start()
//{
// GetComponent<Image>().sprite = await LoadImageAsync("https://fantasymonster-app.oss-cn-hangzhou.aliyuncs.com/goods/mall/c7860d8909194d479b6f27ccb922e863.png");
//}
// 异步加载图片
public async Task<Sprite> LoadImageAsync(string url)
{
// 如果缓存中已经有图片,则直接返回缓存的图片
if (imageCache.ContainsKey(url))
{
Debug.Log("Image found in cache.");
return imageCache[url];
}
// 如果缓存中没有图片,则异步加载
using (UnityWebRequest webRequest = UnityWebRequestTexture.GetTexture(url))
{
// 等待请求完成
//await webRequest.SendWebRequest().ToTask();
// 发送请求并等待响应
var operation = webRequest.SendWebRequest();
while (!operation.isDone)
await Task.Yield(); // 等待请求完成使用await以非阻塞的方式处理
// 检查请求是否成功
if (webRequest.result == UnityWebRequest.Result.Success)
{
// 获取下载的纹理
Texture2D texture = ((DownloadHandlerTexture)webRequest.downloadHandler).texture;
// 将纹理缓存
imageCache[url] = TextureToSprite(texture);
return imageCache[url];
}
else
{
Debug.LogError("Failed to load image: " + webRequest.error);
return null;
}
}
}
// 将Texture2D转换为Sprite
Sprite TextureToSprite(Texture2D texture)
{
// 使用纹理的尺寸创建一个Sprite
return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
}
// 加载并显示图片
//public async void LoadAndDisplayImage(string url, Renderer renderer)
//{
// Texture2D texture = await LoadImageAsync(url);
// if (texture != null)
// {
// renderer.material.mainTexture = texture;
// }
//}
}

11
base/ImageLoader.cs.meta Normal file
View File

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

139
base/base.cs Normal file
View File

@ -0,0 +1,139 @@
using DG.Tweening;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
public class Base : MonoBehaviour
{
private List<string> LoadClassName = new List<string>() { "ImageLoader" , "Global" };//写入需要全局自动实例化的类
public Button retbutton;
public GameObject ClosureObj;
public static GameObject GlobalObj;
/// <summary>
//初始化
/// </summary>
private void Awake()
{
Application.targetFrameRate = Mathf.RoundToInt(55f); // 设置目标帧率
initializeGlobal();
if (retbutton != null)
{
retbutton.onClick.AddListener(() => CancelOnClick(retbutton, ClosureObj));
}
}
/// <summary>
/// 初始化全局类
/// </summary>
private void initializeGlobal()
{
if (GlobalObj == null)
{
GlobalObj = new GameObject("GlobalObj");
DontDestroyOnLoad(GlobalObj);
foreach (string className in LoadClassName) {
CallClassByString(className);
}
}
}
/// <summary>
/// 用于通过类名字符串动态调用类和方法
/// </summary>
/// <param name="className"></param>
public void CallClassByString(string className)
{
// 获取类的 Type 对象
Type type = Type.GetType(className);
if (type != null)
{
GlobalObj.AddComponent(type);
}
else
{
Console.WriteLine("Class not found.");
}
}
/// <summary>
/// 按钮动画,点击后会放大缩小
/// </summary>
/// <param name="button">实施目标对象</param>
/// <param name="max">放大倍率</param>
/// <param name="timemultiple">动画持续时间倍率</param>
/// <returns></returns>
public async Task ButtonClickAnimationAsync(GameObject button,float max=1.25f,float timemultiple = 1)//按钮动画
{
TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
Sequence mySequence = DOTween.Sequence();
mySequence.Append(button.transform.DOScale(max, 0.1f* timemultiple)) // 第一个动画
.Append(button.transform.DOScale(1f, 0.2f* timemultiple)).OnComplete(() => {
// 动画播放完成后执行的代码
tcs.SetResult(true);
}); // 第二个动画
await tcs.Task;
}
public void addEventPopUp(string Details,float time = 5f)//添加弹窗
{
GameObject prefab = Resources.Load<GameObject>("base/EventPopUp");
prefab.GetComponent<EventPopUp>().time = time;
Canvas canvas = GetComponentInParent<Canvas>();
prefab.GetComponent<EventPopUp>().text = Details;
Instantiate(prefab, canvas.transform);
}
//logoPanel.ServerResponse TestserverResponse;
//protected Dictionary<string, string> testhead;
//public async void testLogo()//测试登录
//{
// LoginAndGetToken.loginbody body = new LoginAndGetToken.loginbody
// {
// userName = "15151658596",
// password = "123456",
// verifyCode = 111111
// };
// string loginResponse = await web.SendRequest(web.URL + "/snail/user/login", "POST", JsonUtility.ToJson(body));
// logoPanel.ServerResponse response = JsonUtility.FromJson<logoPanel.ServerResponse>(loginResponse);
// if (response != null && response.code == 200 && response.data != null)
// {
// TestserverResponse = response;
// addEventPopUp("测试登录成功");
// testhead = new Dictionary<string, string>
// {
// { "Authorization", TestserverResponse.data.token }
// };
// return;
// }
// addEventPopUp(response.message);
// testhead = new Dictionary<string, string>();
//}
public bool IsGreaterThanZeroDecimal(string text)//判断必须为小数而且大于0
{
// 使用正则表达式匹配大于0的小数
string pattern = @"^(?!0(\.0+)?$)(\d+(\.\d+)?|\.\d+)$";
Regex regex = new Regex(pattern);
return regex.IsMatch(text);
}
public async void CancelOnClick(Button button,GameObject my_gameObject = null)//取消按钮
{
await ButtonClickAnimationAsync(button.gameObject);
if (my_gameObject != null)
{
Destroy(my_gameObject);
return;
}
Destroy(gameObject);
}
}

11
base/base.cs.meta Normal file
View File

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

8
test.meta Normal file
View File

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

18
test/test.cs Normal file
View File

@ -0,0 +1,18 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : Base
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}

11
test/test.cs.meta Normal file
View File

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

20
test/test1.cs Normal file
View File

@ -0,0 +1,20 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class test1 : Base
{
// Start is called before the first frame update
async void Start()
{
GetComponent<Image>().sprite = await GlobalObj.GetComponent<ImageLoader>().LoadImageAsync("https://fantasymonster-app.oss-cn-hangzhou.aliyuncs.com/goods/mall/c7860d8909194d479b6f27ccb922e863.png");
}
// Update is called once per frame
void Update()
{
}
}

11
test/test1.cs.meta Normal file
View File

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