关键字 delegate
在C#中,delegate
是一种用于声明和使用委托(delegate)的类型。委托是一种引用类型,用于封装对方法的引用,允许将方法作为参数传递给其他方法,或者将方法作为返回值从方法返回。
例子
using System;
public class Program
{
// 定义一个委托类型,该委托可以引用一个无参数、无返回值的方法
public delegate void MyDelegate();
static void Main()
{
// 创建委托实例,并将方法 PrintMessage 与委托关联
MyDelegate myDelegate = PrintMessage;
// 调用委托,实际上会调用与之关联的方法 PrintMessage
myDelegate();
Console.ReadKey();
}
// 委托关联的方法,无参数、无返回值
static void PrintMessage()
{
Console.WriteLine("Hello, Delegate!");
}
}
MyDelegate
是一个委托类型,它可以引用一个无参数、无返回值的方法。然后,通过实例化委托,并将其关联到方法 PrintMessage
上,最后调用委托时实际上调用了关联的方法。
委托在事件处理、回调函数等场景中很有用,它允许实现灵活的、基于委托的程序设计。
DOTween 在 safe mode 中捕获到错误
原因
MonoBehaviour.Destroy(obj,2f);//第二个参数是延迟的时间(以秒为单位)。在这里,1表示延迟1秒后销毁obj。
//注意:销毁时间必须大于所有动画时间的总和 不然会报错
小于动画时间总和进行如下报错
DOTWEEN ► SAFE MODE ► DOTween's safe mode captured 1 errors. This is usually ok (it's what safe mode is there for) but if your game is encountering issues you should set Log Behaviour to Default in DOTween Utility Panel in order to get detailed warnings when an error is captured (consider that these errors are always on the user side).
建议
个消息是关于 DOTween 库中 "safe mode" 的使用。当 DOTween 在 safe mode 中捕获到错误时,这意味着它检测到可能引起问题的情况,并以一种方式处理以防止崩溃或意外行为。
在你的情况下,它指示捕获到了一个错误。建议将 DOTween Utility 面板中的 Log Behaviour 设置为 Default。这将在捕获到错误时提供更详细的警告,帮助你识别和解决游戏中的任何问题。
操作步骤如下:
- 打开 Unity 编辑器中的 DOTween Utility 面板。
- 找到 Log Behaviour 设置。
- 将 Log Behaviour 设置为 Default。
这将提供有关错误的更详细信息,然后你可以调查并解决触发错误的代码或配置中的特定问题。
请记住,safe mode 的设计目的是防止崩溃并在存在问题时保持应用程序运行。但是,解决潜在问题是确保应用程序稳定和无错误运行的关键。
关于DG.Tweening库
DG.Tweening
是一个用于在Unity中进行动画处理的第三方库。它提供了一种简单而强大的方式来创建和管理动画,使得在游戏和应用程序中实现平滑的过渡和动画效果变得更加容易。
-
链式调用:
DOTween
允许你使用链式调用的方式定义和执行动画。这使得代码更加紧凑和易读。 -
transform.DOMoveX(5f, 1f).SetEase(Ease.OutQuad);
-
缓动函数: 提供了多种缓动函数(easing functions),可以轻松地实现各种动画效果,如缓慢开始、缓慢结束等。
-
transform.DOMoveY(3f, 1f).SetEase(Ease.InOutCubic);
-
循环和反向: 支持动画的循环播放和反向播放。
-
transform.DORotate(new Vector3(0, 360, 0), 2f).SetLoops(-1, LoopType.Incremental);
-
延迟和回调: 允许你设置动画的延迟时间和在动画完成时执行回调。
-
transform.DOMoveX(5f, 1f).SetDelay(0.5f).OnComplete(MyCallback);
-
多种动画类型: 支持位移、旋转、缩放等多种类型的动画。
-
transform.DOMove(new Vector3(2f, 0, 0), 1f);
善用【Header】
在Unity中,[Header]
是一个用于美化Inspector面板的属性标签。它允许你在Inspector中创建一个带有标题的折叠区域,以更清晰地组织和展示你的变量。
public class Example : MonoBehaviour
{
[Header("General Settings")]
public int health = 100;
public string playerName = "Player 1";[Header("Weapon Settings")]
public string weaponName = "Sword";
public int damage = 20;
}
回顾 Instantiate
方法重载(部分)
-
根据原始对象实例化:
public static Object Instantiate(Object original);
这是最基本的重载,接受一个原始对象作为参数,并返回一个新的实例。这个实例是原始对象的拷贝。
GameObject instance = Instantiate(originalObject);
-
指定位置和旋转实例化:
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
在基本实例化的基础上,可以指定新实例的位置和旋转。
GameObject instance = Instantiate(originalObject, new Vector3(0, 0, 0), Quaternion.identity);
-
指定父级实例化:
public static Object Instantiate(Object original, Transform parent);
在基本实例化的基础上,可以指定新实例的父级。
GameObject instance = Instantiate(originalObject, parentTransform);
-
指定位置、旋转和父级实例化:
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
结合上述三种参数,可以同时指定新实例的位置、旋转和父级。
GameObject instance = Instantiate(originalObject, new Vector3(0, 0, 0), Quaternion.identity,