首页 > 其他分享 >unity学习日志5(麦扣老师3DRPG项目学习)

unity学习日志5(麦扣老师3DRPG项目学习)

时间:2023-05-28 20:02:30浏览次数:33  
标签:return instance unity 麦扣 static 单例 null public 3DRPG

设计模式

单例模式(泛型单例)

作用:提高代码复用率,增加代码可读性

//实现泛型单例,并对T进行约束,规定只有各类manager使用单例模式
public class Singleton<T> : MonoBehaviour where T : Singleton<T>
{
    private static T instance;
    
    //通过属性来访问直接获取私有的静态类
    public static T Instance
    {
        get { return instance; }
    }
    
    //manager类的一些共有特点写在virtual函数中
    //用virtual可以使继承泛型类的类可以重写函数,达成各个类的特色功能
    protected virtual void Awake()
    {
        //保证只存在一个静态对象,避免冲突
        if(instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            instance = (T)this;
        }
    }

    //判断是否已经实例化出静态对象
    public static bool IsInitialized
    {
        get { return instance !=null; }
    }

    protected virtual void OnDestroy()
    {
        if(instance !=null)
        {
            instance = null;
        }
    }

}

一些复用

数据复用

public ChaeacterData_S0 templateData; 
public ChaeacterData_S0 characterData;
private void Awake()
{
    if(templateData != null)
    {
            characterData=Instantiate(templateData);
    }
}

通过使用模板给场景中相同的怪物设定相同的属性,避免对每个怪物都重新创建数据

动画复用

Animator Override Controller

对于某些动画逻辑相似的物体,可直接创建这个,并将之前的Animator复值给此组件,再相应的替换动画

C#语法相关

拓展方法:拓展某个类给某个类T添加函数

注意:该拓展必须放在非泛型的静态类中

语法:

public static 类型 函数名(this 要扩展的类 任意名称,函数变量1,...)
{
  函数功能实现
}

例子

public static class ExtensionMethod
{
    public const float Threshold = 0.5f;
   public static bool isFacingTarget(this Transform transform, Transform target)
    {
        var vectorToTarget = target.position - transform.position;
        vectorToTarget.Normalize();

        if (Vector3.Dot(transform.forward, vectorToTarget) > Threshold)
            return true;
        return false;
    }
}

项目中的应用:通过判断玩家是否在怪物前方来判断怪物是否对玩家造成伤害

标签:return,instance,unity,麦扣,static,单例,null,public,3DRPG
From: https://www.cnblogs.com/laniser/p/17438728.html

相关文章

  • Unity的IPostGenerateGradleAndroidProject:深入解析与实用案例
    UnityIPostGenerateGradleAndroidProjectUnity是一款流行的跨平台游戏引擎,它支持多种平台,包括Android。在Unity中,我们可以使用IPostGenerateGradleAndroidProject接口来自定义Gradle构建过程。本文将介绍如何使用IPostGenerateGradleAndroidProject接口,并提供三个使用例子。IPos......
  • Unity的UnityStats: 属性详解与实用案例
    UnityStats属性详解UnityStats是Unity引擎提供的一个用于监测游戏性能的工具,它提供了一系列的属性值,可以帮助开发者解游戏的运行情况,从而进行优化。本文将详细介绍UnityStats的每个属性值,并提供多个使用例子帮助开发者更好地使用UnityStats。帧率相关属性UnityStats.fps......
  • Unity的IGenerateNativePluginsForAssemblies:深入解析与实用案例
    UnityIGenerateNativePluginsForAssembliesUnity是一款非常流行的游戏引擎,它支持多种平台,包括Windows、Mac、Linux、Android、iOS等。在Unity中,我们可以使用C#编写游逻辑,但是有些时候我们需要使用一些原生的代码来实现一些高性能的功能,比如图像处理、音频等。这时候,我们就需要使......
  • Unity的IUnityLinkerProcessor:深入解析与实用案例
    UnityIUnityLinkerProcessorUnityIUnityLinkerProcessor是Unity引擎中的一个接口,它允许开发者在Unity项目构建时对代码进行链接处理。这个接口可以用来优化项目构建大小,减少不必要的代码和资源,提高项目的性能和加载速度。接口定义IUnityLinkerProcessor接口定义如下:namespace......
  • Unity的IGenerateNativePluginsForAssemblies:深入解析与实用案例
    UnityIGenerateNativePluginsForAssembliesUnity是一款非常流行的游戏引擎,它支持多种平台,包括Windows、Mac、Linux、Android、iOS等。在Unity中,我们可以使用C#编写游逻辑,但是有些时候我们需要使用一些原生的代码来实现一些高性能的功能,比如图像处理、音频等。这时候,我们就需要使......
  • Unity的IActiveBuildTargetChanged:深入解析与实用案例
    UnityIActiveBuildTargetChangedUnityIActiveBuildTargetChanged是Unity引擎中的一个非常有用的功能,它可以让开发者在切换构建平台时自定义哪些操作需要被执行。这个功能可以帮助开发者更好地控制项目的构建过程,确保在切换构建平台时执行必要的操作。在本文中,我们将介绍UnityIA......
  • Unity的IPreprocessShaders:深入解析与实用案例
    UnityIPreprocessShadersUnityIPreprocessShaders是Unity引擎中的一个非常有用的功能,它可以让开发者在编译Shader时自定义哪些操作需要被执行。这个可以帮助开发者更好地控制Shader的编译过程,确保在编译Shader时执行必要的操作。在本文中,我们介绍UnityIPreprocessShaders的使用......
  • Unity的IPreprocessComputeShaders:深入解析与实用案例
    UnityIPreprocessComputeShadersUnityIPreprocessComputeShaders是Unity引擎中的一个非常有用的功能,它可以让开发者编译ComputeShader时自定义哪些操作需要被执行。这个可以帮助开发者更好地控制ComputeShader的编译过程,确保在编译ComputeShader时执行必要的操作。在本文中,我......
  • Unity的IActiveBuildTargetChanged:深入解析与实用案例
    UnityIActiveBuildTargetChangedUnityIActiveBuildTargetChanged是Unity引擎中的一个非常有用的功能,它可以让开发者在切换构建平台时自定义哪些操作需要被执行。这个功能可以帮助开发者更好地控制项目的构建过程,确保在切换构建平台时执行必要的操作。在本文中,我们将介绍UnityI......
  • Unity的IPostBuildPlayerScriptDLLs:深入解析与实用案例
    UnityIPostBuildPlayerScriptDLLsUnityIPostBuildPlayerScriptDLLs是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目后自定义哪些文件需要被复制到输出目录中。这个功能可以帮助开发者更好地控制项目的构建过程,确保输出目录只包含必要的DLL文件。在本文中,我们将介绍U......