Unity基础
设置
运行项目免去加载时间:ProjectSetting->Edit->Enter Play Mode Options
File->build Setting ->查看场景标识符
FIle->build settind->player setting->build
file->new scene创建新场景,ctrl+s保存
inspector右上...3个点,normal常规模式,debug调试模式(可以查看private变量)
Game窗口右上,player……Maximized游戏窗口
插件下载⚙️
插件:别人写好的cs文件,直接调用接口完成功能
对于资源,首先在Asset Store添加,然后对于项目用到的需要,Window->Package Manage ->选择My Assest->搜索名称并下载Download->Import导入到项目
1️⃣ DOTween :https://reurl.cc/WrWYRDPlugins/DoTween,平滑过渡效果(变换,颜色等)
2️⃣ Timers Manager: https://reurl.cc/M0Dm4LSmart Timers Manager计时器
3️⃣ Spawn Mega:https://reurl.cc/vdXb0y生成,添加spawn mega组件
4️⃣ Free Music: https://reurl.cc/j1p4WDMusic Tracks音乐
5️⃣ Game SFX:https://reurl.cc/RrD7qg音效
6️⃣ Dragon Warrior: https://reurl.cc/vdXbaysprite图像
7️⃣ Zombie:https://reurl.cc/KbDzlM
8️⃣ Wooden GUI: https://reurl.cc/e3abyQ
9️⃣ Background:https://reurl.cc/6QerQd
Input System插件:
设置输入管理系统:ProjectSetting->Player-》Active input Handling->Both允许你选择项目的输入处理系统,选择“Both”意味着你的项目将同时支持旧的输入管理系统(Input Manager)和新的输入系统(Input System Package)
Window->Package Manage ->Unity Registry->Input System插件
创建Player Input组件,调整Behavior ->invoke unity events,事件与挂载的脚本函数绑定
事件是发布(事件)订阅(事件)系统,订阅事件就是绑定自定义行为,发布就是调用事件,即执行与事件绑定的自定义行为
c#API:
脚本挂载到引擎obj上,创建类实例(对象)
var变量类型,相当于c++的auto
[SerializeField]安全名,将变量显示到引擎上
LastUpdate()在所有Update开始执行后开始执行LastUpdate,每帧更新
调试
Debug.Log();
定义属性:
属性访问器get{},set{}允许类控制对其内部数据的访问
生成
Instantiate(gameobject,position,)在什么位置生成
触发
public Vector2 Position/* 属性(Property) */
{
get { return playerTransform.position; }
}
void OnTriggerEnter2D(Collider2D col)当刚体发生碰撞 ,Collider2D是被撞击的obj,需要彼此都有碰撞体
Physics2D.OverlapCircleNonAlloc(圆心,半径,Collider2D[]结果)以什么为圆心获取周围的物体
Quaternion
Quaternion.LookRotation(绕什么轴,旋转到什么方向)
Quaternion.identity就是 new Quaternion(0f, 0f, 0f, 1f);
Quaternion.Euler(0, 0, 0)
Find
.CompareTag("")查找标签
FindObjectOfType<……>()
.GetComponent<>();获取组件
UnityEvent
UnityEvent<type,……>(<>可省略,内部为在事件中传递的数据)创建事件,type是参数类型,.Invoke(参数……)执行事件,
对于具有<>的,我们在引擎要选择无(参数)的版本
TimersManager
TimersManager.SetTimer(this,time, fun);;插件的 设置计时器,在time时间后执行fun函数
TimersManager.SetLoopableTimer(this,time,fun); 设置循环计时器,在time时间执行一次
Time.timeScale = 0;暂停 =1继续
(注意:要在世界添加time manager脚本)
SceneManager
SceneManager.LoadScene(场景标识符)
animator
animatot.SetBool(string, bool);
rigidbody
rigidbody.velocity设置刚体速度矢量,不需要考虑FPS,内置会自动计算
Transform
transform.position获取自身this的变换组件的位置
transform.localScale获取自身this的变换组件的缩放
vector
vector.MoveTowards(起始,终点,速度)
vector.one通常将数值转为矢量
vector.zero通常作为判断条件
random
Random.Range()
组件component
collider
is trigger其他物体可以进入
Rigid body2d
物理组件刚体Rigid body2d中gravityscale重力0--1,
constraints->freeze position /rotation 冻结位移/旋转
Canvas
render mode:覆盖,摄像机,世界
silder
仅保留fill area-》子集fill,在silder.target graphic选中fill
设置anchors,pivot,position
unity内置bug:当按ctrl z 或者调整silder的宽高时fill消失,重新设置target graphic或者重新调整anchors
silder有value,min/max value的值,控制填充
sprite renderer
控制图形渲染
collider
is trigger是否可以穿透
flip面向方向
sorting layer所在层级,新建层级在引擎的右上,可以拖放改变层级顺序
order in layer层级索引,层级值越高,越后被渲染,显示在前面
audio source,AudioClip
无法播放声音,可能是game的声音图标设置为关,或者没有audio listener组件
audio source.stop()
playe on awake开始时播放
loop循环
audioSource.PlayOneShot(AudioClip)播放音效
Animation
animator.Play(string)
window->animation->animation,
选中要为其创建动画的物体(会自动为物体创建animator)->create一个动画
再次创建create new clip
animator
打开animator,右击节点选择make transition创建过渡
左侧的parameter创建参数
点击过渡的condition创建条件
has exit time是否有过渡时间,transition duration过渡时间
在运行时选中obj,就可以看到animator中的执行
camera
内置渲染管线下camera组件介绍https://blog.csdn.net/enternalstar/article/details/118818159
input
内置输入系统
project setting->input manager,负责接收用户输入,name为别名,button,Axis轴
Input.GetAxisRaw(string)返回原始输入,string要和name完全对应
Input.GetAxis(string)返回值是经过平滑处理的
比如:按wasd会让相应的轴变为-1或1
FPS:
在game游戏窗口的free aspect中勾选VSync,当开启会减少帧率
在game游戏窗口的stats中查看FPS帧率(每毫秒多少画面)
假设当我们一直按下移动键,每帧调用Update(),*GetAxisRaw()固定值,每个玩家帧率都不同,因此每个玩家的位移都不同
那么如何才能让每个玩家在相同时间相同输入不同帧率下位移相同呢?
*Time.deltaTime时差 == 1 / FPS,帧率越高,时差越小,帧率越低,时差越大
对角问题
还有一个问题,当我们同时按下比如wd时,会发现移动明显加快,这是因为向量相加结果为对角向量位置,它比任意一方向移动都要长,
解决方式.Normalize()正规化,这样就可以让对角方向向量正规化为1,
Prefab预制体
Prefab预制体,将设置的组合体,保存为资源,但这时资源和场景是完全分离的,因此如果预制体调用了场景中其他实例(类对象),则无法获取到,抛出nullreferenceException空引用异常
因此想要防止上述情况,其中一种解决方式,设置被调用实例为单例(在程序中唯一类实例instance),这样其中的方法就不属于任何类实例,就可以直接获取了
TileMap
创建obj,tile anchor设置每个瓦片大小
打开window->2D->tile palette 面板,用于设置瓦片颜色,
create palette创建一个调色板,将集合所有图片的PNG拖进去,创建
代码规范
类名(创建时不能有空白,且需要和脚本类名一致)/函数名大驼峰,变量小驼峰
vscode快捷键
ctrl + shilt + k删除行
ctrl + d 选中光标所在的单词
ctrl
+ shift
+ \
左右括号之间跳转
ctrl + k + s快捷键编辑
ctrl + '+‘ + ’. ‘ 自动生成定义等
enter,tab补全方式不同
ctrl + b 显示,关闭Explore
原文地址:https://blog.csdn.net/sengyongan/article/details/142864654
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!