| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity 2D学习总结 -> 正文阅读 |
|
[游戏开发]Unity 2D学习总结 |
unity开发平台的使用 1、游戏对象 游戏对象的显示关系 游戏对象的轴心一般为游戏对象的几何中心,也可以进行人为更改 游戏对象的父子关系:将一个游戏对象挂载的另一个游戏对象下,子节点以父节点作为轴心参考 摄像机:游戏运行时的实际画面即为摄像机所看到的画面 2、Component 组件 Sprite Renderer组件:用于显示图片 Transform组件:用于调整游戏对象的Position(位置)、Rotation(旋转)、Scale(缩放) AudioSource 组件:用于播放音频 3、游戏脚本Script 游戏脚本挂载在游戏对象下 类名必须与文件名相同 必须继承于 MonoBehaviour ,所有 Unity 脚本都继承于这个类 默认定义了一些事件函数,如 Start() , Update() ,会被 Unity 引擎自动调用 Start() 开始调用一次,可用于初始化;Update() 每帧调用,帧间隔不等,可用于更新游戏 显式设置帧率:Application.targetFrameRate = 50,实际上实际帧率仍有偏差 获取上一帧的间隔:Time.deltaTime 获取任意节点下的组件: 获取节点:GameObject obj = GameObject.Find("/path/of/target"); 获取节点下的组件:SpriteRenderer comp = obj.GetComponent<SpriteRenderer>(); 获取当前节点下的组件: SpriteRenderer renderer = this.gameObject.GetComponent<SpriteRenderer>(); 添加脚本组件的属性(参数): public int number = 10; ??public string helloMessage = "Hi"; 只有 public 属性才在 Inspector 里显示 在 Inspector 里可以修改初始值 也可以添加引用类型的属性,如图片资源、游戏对象、组件 事件函数 不以 On 打头的,由系统主动调用 Awake() , Start(), Update(), ?FixedUpdated() 以 On 打头的,是相应事件的回调函数 OnEnable(), OnDisable (), OnGUI() … 脚本的执行顺序 Execution Order : ?脚本的执行顺序,即优先级 默认的执行顺序为无序,为0 执行顺序的设定:Project Settings | Script Execution Order 顺序值越小,则越优先。 4、坐标 节点的坐标用三维向量Vector3表示 transform.position = new Vector3(0, 1.0f, 0); 指定旋转角度时,用 eulerAngles 或者 localEulerAngles transform.eulerAngles = new Vector3(0, 0, 90f); 世界坐标 World Space Position 以世界坐标系计算 transform.position = new Vector3(0, 1.0f, 0); ?指定世界坐标 本地坐标 Local Space Position 以父节点的坐标系计算 transform.localPosition = new Vector3( 0, 1.0f, 0);??指定本地坐标 世界坐标(该物体在世界空间中的坐标) 屏幕坐标(通过屏幕观察,该物体在屏幕上的位置) Vector3 pos = transform.position; Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos); 获取屏幕坐标(左下角为屏幕坐标系的原点) 屏幕坐标的边界:Screen.width ?Screen.height 5、物体的运动 坐标系 Space.Self 使用自己的坐标系 ( 默认值 ) Space.World 使用世界坐标系 transform.Translate(0, 0.02f, 0, Space.Self); 相对运动 transform.Translate( dx, dy, dz) ???即在原位置上偏移 dx, dy, dz 的距离 沿自己的y轴方向进行改变 绝对运动(绝对改变) transform.position = new Vector3(0, 1.0f, 0); 运行的方向 Vector3 face = this.transform.up; Vector3 direction = target.transform.position - this.transform.position; float angle = Vector3.SignedAngle(face, direction, Vector3.forward); this.transform.Rotate(0, 0, angle);????//旋转与目标的夹角,从而转向目标 改变旋转的方向 6、向量 长度 float len = v.magnitude; 标准化 Vector3 a = new Vector3(3f, 4f, 0); Vector3 b = a.normalized; Debug.Log("标准化为: " + b.ToString( "F3" ));???F3为保留3位小数 几个常用的标准向量 向量夹角 Vector3 a = new Vector3(2, 2, 0); Vector3 b = new Vector3(-1, 3, 0); float angle = Vector3.SignedAngle(a, b, Vector3.forward);? 将 a 向量逆时针旋转,到b向量所划过的角度 7、鼠标事件处理 鼠标事件 Input.GetMouseButtonDown(0) ?检查鼠标按下事件 Input.GetMouseButtonUp(0) ???检查鼠标抬起事件 Input.GetMouseButton(0) ??????检查鼠标状态 ( 是否是按下状态 ) 获取的坐标为屏幕坐标 Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Debug.Log("世界坐标: " + pos); pos.z = 0; 屏幕坐标转化为世界坐标 执行逻辑 鼠标事件发生了,大家都知道 每一个游戏对象,都可以根据鼠标事件来做自己的处理。 8、预制体 预制体 Prefab,一般用于游戏对象的动态创建 使用预制体,可以快速创建多个相同的实例 修改预制体时,每一个实例都会自动更新 修改预制体实例,也会影响到预制体资源和所有的实例 动态创建实例 bullet = Instantiate(myPrefab) 创建一个实例,position与rotation与当前游戏对象相当,挂载场景根节点下 bullet = Instantiate(myPrefab, Transform parent ) 创建一个实例,position与rotation与当前游戏对象相当,同时指定父节点 销毁实例 9、物理系统 刚体Rigidbody Dynamic 普通刚体,有质量、有速度 Static ???静态刚体,质量无穷大、无速度 ???????( 适用于建筑物、地面等固定不动的物体) Kinematic 运动学刚体,无质量 ???????( 忽略物理规律的刚体,一般用于碰撞检测 ) 碰撞体组件 Collider 碰撞检测(碰撞组件的Is Trigger) 碰撞事件回调 OnTriggerEnter2D :两个碰撞体开始相遇 OnTriggerStay2D : 两个碰撞体接触中 OnTriggerExit2D: 两个碰撞体分开 collision.gameObject 对方 collision.transform ?对方的Transform组件 collision.name ???????对方节点的名称 collision.tag ???????????对方节点的Tag tag的设置Edit | Project Settings | Tags and Layers … 添加一个自定义的Tag ,如 Target 选中一个物体,在 Inspector 中选择适合的Tag 在碰撞回调中,通过 collision.tag 来识别对方身份 10、音频的播放 AudioSource 组件:用于播放音频 代码实例: ?AudioSource audio = GetComponent<AudioSource>(); ?audio.Play(); AudioSource.Play() :如果正在播放中,则停止,从头开始播放 PlayOneShot ( clip ) :则新开一个播放 11、延时调用 invoke Invoke ("Response", ?3)?????内部使用了 ‘反射机制’ Invoke 相关的 API Invoke ( name ) ?:添加一个延时调用 CancelInvoke( name ) :取消延时调用 IsInvoking( name ) :检查一个延时调用是否在等待中 .. InvokeRepeating( name, delay, interval) :延时调用、并重复执行 (定时器) 消息调用 第一种: GameObject main = GameObject.Find("游戏主控") ??MyGame myGame = main.GetComponent<MyGame>(); ??myGame.AddScore(); 第二种: GameObject main = GameObject.Find("游戏主控"); ??main.SendMessage("AddScore", 1); 12、UI 添加UI UI事件处理 第一种: Button 组件,可以直接添加 OnClick 点击处理 第二种: 在脚本中实现 IPointerDownHandler 接口 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/21 19:51:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |