【Unity知识扫盲】最常用的基础概念

Unity核心基础概念详解

基础知识体系架构介绍

1. 核心组件系统 GameObject 和 Component
// GameObject 是场景中所有实体的基类
GameObject obj = new GameObject("MyObject");
// 添加组件
obj.AddComponent<Rigidbody>();
obj.AddComponent<BoxCollider>();
// 获取组件
var rb = obj.GetComponent<Rigidbody>();
var controller = obj.GetComponent<MaterialBreathingLightController>();
// 在子对象中查找
var tweenablePart = obj.GetComponentInChildren<TweenableTransformController>();
// 在父对象中查找
var parent = obj.GetComponentInParent<ParentController>();
// 获取所有组件
var allComponents = obj.GetComponents<Component>();
2. Transform 层级系统
// 位置、旋转、缩放
transform.position = new Vector3(0, 10, 0);
transform.rotation = Quaternion.Euler(0, 90, 0);
transform.localScale = new Vector3(2, 2, 2);
// 本地坐标 vs 世界坐标
transform.localPosition;   // 相对父对象
transform.position;        // 世界坐标
// 层级操作
transform.parent = parentTransform;
transform.SetParent(newParent);
var child = transform.GetChild(0);
int childCount = transform.childCount;
// 查找子对象
Transform found = transform.Find("ChildName");
Transform deep = transform.Find("Child/GrandChild");
3. 生命周期函数
public class MyScript : MonoBehaviour {
    // 初始化(只执行一次,在第一帧之前)
    void Awake() { }
    // 启用时执行
    void OnEnable() { }
    // 第一帧之前(在Awake之后)
    void Start() { }   
    // 每帧更新
    void Update() { } 
    // 固定时间间隔更新(物理)
    void FixedUpdate() { }
    // 在Update之后执行(常用于相机跟随)
    void LateUpdate() { } 
    // 禁用时执行
    void OnDisable() { }
    // 销毁时执行
    void OnDestroy() { }
}

执行顺序:

Awake → OnEnable → Start → FixedUpdate → Update → LateUpdate → OnDisable → OnDestroy
4. 协程 (Coroutine)
// 启动协程
StartCoroutine(MyCoroutine());
StartCoroutine(DelayedAction(2.0f));
// 停止协程
StopCoroutine(myCoroutine);
StopAllCoroutines();
// 协程定义
IEnumerator MyCoroutine() {
    Debug.Log("开始");
    yield return new WaitForSeconds(2f);  // 等待2秒
    Debug.Log("2秒后");
    yield return new WaitForFixedUpdate();  // 等待下一个物理帧
    yield return null;  // 等待下一帧
    yield return new WaitUntil(() => isReady);  // 等待条件满足
    Debug.Log("结束");
}
IEnumerator DelayedAction(float delay) {
    yield return new WaitForSeconds(delay);
    DoSomething();
}
5. 预制体 (Prefab) 与实例化
// 实例化预制体
GameObject instance = Instantiate(prefab);
GameObject instance2 = Instantiate(prefab, position, rotation);
GameObject instance3 = Instantiate(prefab, parent);
// 销毁对象
Destroy(gameObject);
Destroy(gameObject, 2f);  // 2秒后销毁
// 立即销毁(慎用)
DestroyImmediate(gameObject);
// 场景切换时不销毁
DontDestroyOnLoad(gameObject);
6. 碰撞与触发器
// 碰撞检测(需要Collider和Rigidbody)
void OnCollisionEnter(Collision collision) {
    Debug.Log("碰撞开始: " + collision.gameObject.name);
}
void OnCollisionStay(Collision collision) {
    Debug.Log("持续碰撞");
}
void OnCollisionExit(Collision collision) {
    Debug.Log("碰撞结束");
}
// 触发器检测(Collider设置为IsTrigger)
void OnTriggerEnter(Collider other) {
    if (other.CompareTag("Player")) {
        Debug.Log("玩家进入触发区域");
    }
}
void OnTriggerStay(Collider other) { }
void OnTriggerExit(Collider other) { }
7. 输入系统 旧输入系统
void Update() {
    // 键盘输入
    if (Input.GetKeyDown(KeyCode.Space)) {
        Debug.Log("空格键按下");
    }
    // 鼠标输入
    if (Input.GetMouseButtonDown(0)) {  // 左键
        Debug.Log("鼠标左键点击");
    }
    // 轴输入(-1到1)
    float horizontal = Input.GetAxis("Horizontal");  // A/D 或 左/右箭头
    float vertical = Input.GetAxis("Vertical");      // W/S 或 上/下箭头
    // 鼠标位置
    Vector3 mousePos = Input.mousePosition;
}
8. 向量运算 (Vector3)
// 创建向量
Vector3 v1 = new Vector3(1, 2, 3);
Vector3 v2 = Vector3.zero;      // (0, 0, 0)
Vector3 v3 = Vector3.one;       // (1, 1, 1)
Vector3 v4 = Vector3.up;        // (0, 1, 0)
Vector3 v5 = Vector3.forward;   // (0, 0, 1)
// 向量运算
Vector3 sum = v1 + v2;
Vector3 diff = v1 - v2;
Vector3 scaled = v1 * 2;
// 距离
float distance = Vector3.Distance(v1, v2);
// 插值(平滑移动)
Vector3 result = Vector3.Lerp(start, end, 0.5f);  // 中点
Vector3 smooth = Vector3.Slerp(start, end, t);    // 球形插值
// 方向
Vector3 direction = (target - current).normalized;
// 点积(判断朝向)
float dot = Vector3.Dot(v1, v2);
// 叉积(计算垂直向量)
Vector3 cross = Vector3.Cross(v1, v2);
9. 四元数旋转 (Quaternion)
// 创建旋转
Quaternion rot1 = Quaternion.Euler(0, 90, 0);  // 欧拉角
Quaternion rot2 = Quaternion.identity;         // 无旋转
// 看向目标
transform.rotation = Quaternion.LookRotation(direction);
// 平滑旋转
transform.rotation = Quaternion.Lerp(current, target, Time.deltaTime * speed);
transform.rotation = Quaternion.Slerp(current, target, t);
// 旋转向量
Vector3 rotated = rotation * vector;
10. Time 时间管理
void Update() {
    // 帧间隔时间(秒)
    float deltaTime = Time.deltaTime;
    // 游戏开始后的时间
    float time = Time.time;
    // 不受时间缩放影响的时间
    float realTime = Time.unscaledTime;
    float unscaledDelta = Time.unscaledDeltaTime;
    // 时间缩放(慢动作/加速)
    Time.timeScale = 0.5f;  // 半速
    Time.timeScale = 0f;    // 暂停
    Time.timeScale = 2f;    // 2倍速
    // 固定帧率间隔
    float fixedDelta = Time.fixedDeltaTime;  // 默认0.02秒(50fps)
}
11. 场景管理
using UnityEngine.SceneManagement;
// 加载场景
SceneManager.LoadScene("SceneName");
SceneManager.LoadScene(1);  // 按索引
// 异步加载
StartCoroutine(LoadSceneAsync("SceneName"));
IEnumerator LoadSceneAsync(string sceneName) {
    AsyncOperation op = SceneManager.LoadSceneAsync(sceneName);
    while (!op.isDone) {
        float progress = op.progress;  // 加载进度
        yield return null;
    }
}
// 获取当前场景
Scene currentScene = SceneManager.GetActiveScene();
string sceneName = currentScene.name;
12. 资源加载
// 从Resources文件夹加载
GameObject prefab = Resources.Load<GameObject>("Prefabs/MyPrefab");
Sprite sprite = Resources.Load<Sprite>("Sprites/Icon");
// 异步加载
ResourceRequest request = Resources.LoadAsync<GameObject>("Prefabs/MyPrefab");
yield return request;
GameObject loaded = request.asset as GameObject;
13. 标签和层级
// 标签
gameObject.tag = "Player";
if (gameObject.CompareTag("Enemy")) {
    Debug.Log("这是敌人");
}
GameObject player = GameObject.FindGameObjectWithTag("Player");
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
// 层级(Layer)
gameObject.layer = LayerMask.NameToLayer("UI");
// 射线检测时使用层级遮罩
int layerMask = LayerMask.GetMask("Default", "Player");
14. 射线检测 (Raycast)
// 基础射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100f)) {
    Debug.Log("击中: " + hit.collider.gameObject.name);
    Vector3 hitPoint = hit.point;
    GameObject hitObject = hit.collider.gameObject;
}
// 指定层级
int layerMask = LayerMask.GetMask("Ground");
if (Physics.Raycast(origin, direction, out hit, maxDistance, layerMask)) {
    // 只检测Ground层
}
// 检测所有
RaycastHit[] hits = Physics.RaycastAll(ray, 100f);
15. 动画系统
// Animator控制
Animator animator = GetComponent<Animator>();
// 触发动画
animator.SetTrigger("Jump");
animator.SetBool("IsRunning", true);
animator.SetFloat("Speed", 5.0f);
animator.SetInteger("State", 1);
// 播放动画
animator.Play("Idle");
// 获取状态
AnimatorStateInfo info = animator.GetCurrentAnimatorStateInfo(0);
bool isPlaying = info.IsName("Run");
16. UI系统 (UGUI)
using UnityEngine.UI;
// Text
Text text = GetComponent<Text>();
text.text = "Hello World";
// Button
Button button = GetComponent<Button>();
button.onClick.AddListener(OnButtonClick);
void OnButtonClick() {
    Debug.Log("按钮被点击");
}
// Image
Image image = GetComponent<Image>();
image.sprite = newSprite;
image.color = Color.red;
// Canvas Group(控制UI显示)
CanvasGroup canvasGroup = GetComponent<CanvasGroup>();
canvasGroup.alpha = 0.5f;       // 透明度
canvasGroup.interactable = false;  // 禁用交互
canvasGroup.blocksRaycasts = false; // 不阻挡射线

知识体系总结

Unity基础架构
├─ GameObject/Component 系统 ☆☆☆☆☆
├─ Transform 层级 ☆☆☆☆☆
├─ 生命周期 ☆☆☆☆☆
├─ 协程 ☆☆☆☆
├─ 预制体/实例化 ☆☆☆☆☆
├─ 碰撞/触发器 ☆☆☆☆
├─ 输入系统 ☆☆☆☆
├─ 向量/四元数 ☆☆☆☆
├─ 时间管理 ☆☆☆☆
├─ 场景管理 ☆☆☆
├─ 资源加载 ☆☆☆
├─ 标签和层级 ☆☆☆
├─ 射线检测 ☆☆☆
├─ 动画系统 ☆☆☆
└─ UI系统 ☆☆☆☆☆

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍基于Matlab代码实现的四轴飞行器动力学建模与仿真方法。研究构建了考虑非线性特性的飞行器数学模型,涵盖姿态动力学与运动学方程,实现了三自由度(滚转、俯仰、偏航)的精确模拟。文中详细阐述了系统建模过程、控制算法设计思路及仿真结果分析,帮助读者深入理解四轴飞行器的飞行动力学特性与控制机制;同时,该模拟器可用于算法验证、控制器设计与教学实验。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及无人机相关领域的工程技术人员,尤其适合从事飞行器建模、控制算法开发的研究生和初级研究人员。; 使用场景及目标:①用于四轴飞行器非线性动力学特性的学习与仿真验证;②作为控制器(如PID、LQR、MPC等)设计与测试的仿真平台;③支持无人机控制系统教学与科研项目开发,提升对姿态控制与系统仿真的理解。; 阅读建议:建议读者结合Matlab代码逐模块分析,重点关注动力学方程的推导与实现方式,动手运行并调试仿真程序,以加深对飞行器姿态控制过程的理解。同时可扩展为六自由度模型或加入外部干扰以增强仿真真实性。
基于分布式模型预测控制DMPC的多智能体点对点过渡轨迹生成研究(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制(DMPC)的多智能体点对点过渡轨迹生成研究”展开,重点介绍如何利用DMPC方法实现多智能体系统在复杂环境下的协同轨迹规划与控制。文中结合Matlab代码实现,详细阐述了DMPC的基本原理、数学建模过程以及在多智能体系统中的具体应用,涵盖点对点转移、避障处理、状态约束与通信拓扑等关键技术环节。研究强调算法的分布式特性,提升系统的可扩展性与鲁棒性,适用于多无人机、无人车编队等场景。同时,文档列举了大量相关科研方向与代码资源,展示了DMPC在路径规划、协同控制、电力系统、信号处理等多领域的广泛应用。; 适合人群:具备一定自动化、控制理论或机器人学基础的研究生、科研人员及从事智能系统开发的工程技术人员;熟悉Matlab/Simulink仿真环境,对多智能体协同控制、优化算法有一定兴趣或研究需求的人员。; 使用场景及目标:①用于多智能体系统的轨迹生成与协同控制研究,如无人机集群、无人驾驶车队等;②作为DMPC算法学习与仿真实践的参考资料,帮助理解分布式优化与模型预测控制的结合机制;③支撑科研论文复现、毕业设计或项目开发中的算法验证与性能对比。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注DMPC的优化建模、约束处理与信息交互机制;按文档结构逐步学习,同时参考文中提及的路径规划、协同控制等相关案例,加深对分布式控制系统的整体理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值