unity脚本基础学习(未完todo)

一,MonoBehaviour类及其生命周期

1.1创建脚本

新建脚本文件后,文件内会有一段默认代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    
    
    // Start is called before the first frame update
    void Start()
    {
    
    
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
        
    }
}

它源自基类MonoBehaviour,以确保此脚本将在游戏循环中运行,并具有对某些事件作出反应的附加功能。

1.2生命周期

  • 当脚本运行时,unity会按照预定顺序依次调用以下方法,完成生命周期:
    [所有脚本的顺序是并行的]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 初始化:
    Awake():仅执行一次,游戏物体创建时调用一次(不管脚本激没激活),常用于初始化
    OnEnable():可调用多次,当组件设置enable = true、游戏物体设置active = true或脚本激活第一次run时调用
    Start():仅执行一次,在脚本被激活并完成初始化时调用一次(在第一次Update之前),与组件相关
  • 运行:
    FixedUpdate():固定时间更新,默认50fps,默认时间通过Edit->Project Settings->Time面板中的Fixed Timestep设置(与物理引擎相关的更新在这里)
    OnTrigger……():触发,与碰撞互斥,Collider或Rigidbody接触时调用「Enter表示接触瞬间执行一次;Stay表示物体一直接触持续执行;Exit表示物体分开瞬间执行一次。」
    OnCollision……():物理碰撞,与触发互斥,Collider或Rigidbody接触时调用
    Update():当游戏运行且脚本启用时,每帧触发一次(时间不固定,与物理引擎无关的更新在这里)[由于不同设备帧率不同,比如人物移动等需乘上Time.deltaTime----每帧的时间增量]
    LateUpdate():每帧执行,在其他更新执行完之后执行。(一般用于命令脚本执行,比如物体移动位置之后的相机跟随)
  • 结束:
    OnApplicationQuit():应用程序退出时调用
    OnDisable():OnApplicationQuit调用时同时调用,并且行为被禁用enable = false 、对象被销毁active = false时(由激活转向禁用,一直是禁用不管)调用,加载完后调用OnEnable
    OnDestroy():OnApplicationQuit调用时同时调用,并且在Destroy游戏物体时被调用

1.3MonoBehaviour类与普通类的区别

  1. MonoBehaviour类不用创建实例或new,unity会自动完成。但可以通过添加组件的方式替代。
  2. 只有继承了MonoBehaviour才能用Invoke,Coroutine,print以及生命周期函数等
  3. 只有继承了MonoBehaviour才能在面板上看到,挂在物体上

二,面板扩展

2.1 Inspector面板参数

Inspector面板参数与shader类似:

  1. [Header(" ")]----总标题
  2. [Tooltip(" ")]----给紧挨着的下一行注释,在unity里鼠标放在下一行的变量上时出现该注释
  3. [HideInInspector]----不想在面板上出现的public变量
  4. [SerializeField]----可以在面板上出现的private变量
  5. [Range( , )]----表示下一行变量的滑竿范围
  6. [Serializable]----表示声明的类或结构体在unity面板上以折叠的方式展示
  7. [System.Serializable]----unity里自定义数据类型无法显示在inspectior面板里,需要加上[System.Serializable]以显示自定义数据或结构体

2.2 EditorWindows 下拉菜单

[MenuItem("Tools/菜单选项")]
public static void ToolsTest()
{
    
    
    类名 window = (类名)EditorWindow.GetWindow(typeof(类名));
    window.Show();
}
void OnGUI()
{
    
    
}

通过AddItem()添加列表元素

2.3 Assets文件夹右键creat菜单

// 在 Assets 下添加菜单
// fileName 生成名为 Bullet的脚本
// menuName 菜单按钮名New Bullet
// order    按钮显示顺序
[CreateAssetMenu(fileName = "Bullet", menuName = "New Bullet", order = 1)]
public class Bullet: ScriptableObject {
    
    
}

1,Unity’s documentation on MonoBehaviours

猜你喜欢

转载自blog.csdn.net/yx314636922/article/details/126872839