前言:
刚学unity没多久吧(大概1个月多点),这是我自己做的除官网之外的第一个游戏demo,中间存在很多不足的地方,但是还是希望可以给需要的人提供一些思路和帮助,有问题的小伙伴可以找我一起探讨一起学习。游戏的资源和脚本都放在我的github上了,需要的小伙伴也可以去这里clone一份资源下来自己做一做这个游戏,有不会的地方可以参考一下我的脚本,附地址:
游戏开始界面:
首先游戏的开始界面仅仅涉及到一些UGUI的元素
UI部分其实没什么太多的难点,主要是要做好屏幕的适配,需要注意的地方有:
1、在Canvas画布的组件中需要将画布的渲染模式设置为Overlay,这样的话UI元素就会显示在所有游戏物体的前方,不会被遮挡。其次UI的放大缩小模式根据设计分辨率调整,这里我采用的设计分辨率是1334×750,优先按照宽度适配。
2、各个UI元素的锚点根据需求设置到相应的位置,这样在设备分辨率发生改变的情况下,UI会进行拉伸和放缩,我们需要将UI的锚点设置到父类元素的相对位置,比如左上角的头像的锚点可以设置为UI画布的左上角,这样分辨率发生变化的时候,头像的相对位置也不会发生变化,不会出现在很奇怪的位置。
3、这里的场景跳转我使用的是一个单例类SceneController脚本以及一个脚本ChangeScene来控制,下面是代码:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;public class SceneController : MonoBehaviour { private static SceneController _instance; public static SceneController Instance { get { if(_instance==null) _instance = FindObjectOfType(); if(_instance==null) { GameObject gm = new GameObject("SceneController"); _instance = gm.AddComponent (); } return _instance; } } public virtual void Awake() { //如果实例化的对象不是当前的这个对象,则把当前这个对象附加在的gameobject销毁 if (Instance!=this) { Destroy(gameObject); return; } //如果实例化的对象是当前这个对象,则在加载的时候不销毁 DontDestroyOnLoad(gameObject); } public void changeScene(string sceneName) { SceneManager.LoadScene(sceneName); } }
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ChangeScene : MonoBehaviour { public void ChangeSceneByName(string sceneName) { SceneController.Instance.changeScene(sceneName); }}
在写完脚本将它挂载之后,只需要在相应的跳转的按钮上加上相应的onclick事件即可。
好了,开始界面的一些难点就是这些了。
第二章节: