三、Unity基础(主要框架)

一、Unity场景概念

如果把游戏运行过程理解成表演,那么场景就是舞台;

场景本质上是一个配置文件,这个配置文件决定了场景中有哪些东西;

二、Scene和Game窗口

1、Scene

滚轮缩放、拖动

单独选中也可以

最下面这个是全能工具,包含以上所有功能。


在Unity中,可以通过代码编辑器打开unity的界面代码。

Unity的层级面板中 旋转角度有三个值,但是在界面代码中是以四元数呈现出来的旋转角度

在界面代码中修改数值,Unity会提示重载。

三、游戏物体概念

1、物体概念

场景是舞台,那么游戏物体就是演员

在 Unity中称为GameObject

在层级面板中一层一层的覆盖,最下层的会最先渲染

2、组件概念

组件:类似于模块,插上就有,拔掉就没有

Unity中大多情况下,我们写的脚本就是一个组件;Unity内任何游戏物体必须有Transfrom组件;

四、Project窗口和Inspector窗口

1、Project

Project是一个开发时使用的项目资源管理器,是一个文件夹结构

使用右键,创建Unity资源

2、Inspector

也叫检查器窗口

查看某个东西的属性设置

二者一一对应

相当于把Scene面板可视化

五、自定义组件

Unity开发思想在于组件的复用

在开发中,可以创造一些通用的功能,在项目中进行复用

六、从代码角度认识GameObject

1、主要属性

cs 复制代码
 //组件如何获取自身的宿主GameObject
 Debug.Log(gameObject.name);
 gameObject.name = "WSAD";
 Debug.Log(gameObject.name);

2、主要行为

3、销毁组件方式

七、Transform组件的基本信息

作用:负责位置、旋转、缩放的组件;负责父子节点的管理;

cs 复制代码
transform.position = new Vector3(1,1,1);
//transform.rotation = new Vector3 (0,0,0);
transform.eulerAngles = new Vector3(0,0,0);
transform.localScale = new Vector3(2,2,2);

在Unity的Transform组件中,调用的API为这三种。

注:旋转是四元数,不是rotation

默认获取的是世界坐标

八、坐标与Vector结构体

每一个对象根据层级结构排列;有世界坐标和局部坐标

修改当前物体Trans坐标

cs 复制代码
//1
transform.position = new Vector3(0, 3, 0);
//2
transform.position = new Vector3(transform.position.x, 3, transform.position.z);
//3
Vector3 pos= transform.position;
pos.y = 3;
transform.position = pos;

以上三种方法相同

更改旋转坐标

cs 复制代码
transform.eulerAngles = new Vector3(50,60,70);

注:三个数值不能全是90°,会发生万向锁情况。、

九、Transform维护父子结构

1、如何删除游戏物体

两个API

Destroy:销毁物体,不是立即销毁,而是在Update之后销毁

DestroyImmediate:立刻销毁,销毁完才会执行下一行代码

立即销毁,无法输出,会出现空引用

普通销毁,可以输出

2、如何设置父物体

cs 复制代码
test.SetParent(transform);
test.SetParent(null);

3、如何遍历所有子物体

for循环遍历

注:for循环的编程错误

cs 复制代码
 for(int i=0;i<test.childCount;i++)
 {
     test.GetChild(i).SetParent(null);
 }

原因是:每一次循环,子物体的数量都会减少,因此变量i小于的数量不是定值,而是依次加一

解决方案:

第一种:

一直判断物体的子物体个数是否大于0;一直移除第0位

cs 复制代码
//解决方法 一直移除第0位方式
while (test.childCount > 0)
{
	test.GetChild(0).SetParent(null);
}
第二种:

把子物体数量减一,然后移除第零位或者第i位

cs 复制代码
//倒着遍历
for (int i = test.childCount - 1; i >= 0; i--)
{
	test.GetChild(0).SetParent(null);
}

十、组件的生命周期

1、生命周期的概念

一般指一个组件从创建到销毁的所有阶段;这些阶段所做的事情,就是生命周期函数;

也被称为事件函数

2、生命周期函数

Awake和OnDestroy是针对物体的情况的,不是代码情况

把代码取消勾选,这两个函数中的代码依然会执行

3、帧的理解

Unity中常见的移动方式

cs 复制代码
void Update()
{
    float speed = 2f;
    transform.position+=new Vector3(0,0,speed*Time.deltaTime);
}

注:这里一定要用+=


十一、Translate移动

Transform的一个基本函数

1、Translate移动代码

这两个代码相同

cs 复制代码
private void Update()
{
	float speed = 2f;
	transform.position += new Vector3(0,0,speed*Time.deltaTime);
	transform.Translate(new Vector3(0, 0, speed * Time.deltaTime));
}

沿着世界坐标(世界方向) 或者 自身坐标(自己的朝向) 移动

cs 复制代码
transform.Translate(new Vector3(0, 0, speed * Time.deltaTime),Space.World);
transform.Translate(new Vector3(0, 0, speed * Time.deltaTime),Space.Self);

简化

cs 复制代码
Vector3 pos=new Vector3(0,0,speed*Time.deltaTime);
transform.Translate(pos,Space.Self);
相关推荐
小码编匠2 小时前
西门子PLC通信掌握这几项技能,效率大幅提升
人工智能·后端·c#
小码编匠2 小时前
.NET 快速开发企业级CMS内容管理系统,告别重复造轮子!
后端·c#·.net
m0_694845573 小时前
使用服务器搭建开源问答平台Answer
linux·运维·服务器·游戏·开源·云计算
木木黄木木3 小时前
Theos环境搭建与XM文件开发指南,以及iOS弹窗源码分享
ios·c#
吾与谁归in4 小时前
【C#实现手写Ollama服务交互,实现本地模型对话】
c#·ollama·deepseek·本地模型
PassionY4 小时前
Unity DOTS从入门到精通之 C# Job System
unity·ecs·dots·jobsystem·burst·baker·entities
wangnaisheng7 小时前
【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析
c#·wpf
蒋劲豪7 小时前
WPF有哪些使用率高的框架
c#·wpf
wangnaisheng8 小时前
【WPF】在System.Drawing.Rectangle中限制鼠标保持在Rectangle中移动?
c#·wpf
red_redemption8 小时前
Unity--Cubism Live2D模型使用
unity·live2d·cubism sdk