结束了上礼拜轻松的入门看视频后,我开始阅读宣雨松老师写的《Unity3D游戏开发第二版》和《C#入门经典》(从wty那里白嫖获得),非常长草的一个阶段,我看的比较杂,漫无目的地翻阅,因为水平比较低,所以一知半解的,没啥实质性的突破,就总结一下一些新学的实用操作吧!
关于Unity3d游戏开发这本书的代码
这本书有随书代码清单,我下面好多代码就是用的这个代码.建议下载代码.
这样我们学习的时候可以省去敲打代码的时间.我是觉得初学先熟悉和会改动别人的代码就好了.
多开Unity
教程:传送门
学会了多开,就可以打开同时打开自己和别人的project进行学习了!
EPPLUS
我是看着这个小姐姐的视频学了Unity中Excel文件的读取和写入.
传送门
EPPLUS是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010文件的开源组件.
通过EPPLUS可以持久化数据,进行数据的存储和读取.
(可能游戏存档会用到它?距离有点远,先开个头,以后再学)
创建一个简单的UI交互
创建一个新的工程,放入这两个脚本
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Script_05_07 :MonoBehaviour
{
public Button button1;
public Button button2;
public Text text;
public Image image;
void Awake()
{
button1.onClick.AddListener(delegate() {
OnClick(button1.gameObject);
});
button2.onClick.AddListener(delegate() {
OnClick(button2.gameObject);
});
UGUIEventListener.Get (text.gameObject).onClick = OnClick;
UGUIEventListener.Get (image.gameObject).onClick = OnClick;
}
void OnClick(GameObject go)
{
if (go == button1.gameObject) {
Debug.Log ("点击按钮1");
} else if (go == button2.gameObject) {
Debug.Log ("点击按钮2");
}else if (go == text.gameObject) {
Debug.Log ("点击文本框");
}else if (go == image.gameObject) {
Debug.Log ("点击图片");
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class UGUIEventListener : UnityEngine.EventSystems.EventTrigger
{
public UnityAction<GameObject> onClick;
public override void OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData)
{
base.OnPointerClick (eventData);
if (onClick != null) {
onClick (gameObject);
}
}
/// <summary>
/// Get or add an event listener to the specified game object.
/// </summary>
static public UGUIEventListener Get(GameObject go)
{
UGUIEventListener listener = go.GetComponent<UGUIEventListener>();
if (listener == null)
listener = go.AddComponent<UGUIEventListener>();
return listener;
}
}
2.然后在canva里创建两个button,代码里的文本和图片可以先不管,想放的话也可以创建起来.
3.把Script_05_07脚本拖给Canvas
4.在Canvas的Inspector视图里的最下面的脚本的设置里有四个参数,把对应的实例拖进去即可.
5.最终实现效果
我的废话总结:感觉还是有点怪怪的,因为一般的游戏的初始界面背景不会这么杂乱.
我接下来得学学改进一下.
拓展系统菜单
1.下载EPPlus组件
(一定要下载并拖进工程里,不然之后的生成Excel的脚本代码会报错!)
2.将组件拖入工程的project视图里并在Assets目录下新建一个Excel
这时候再在Editor目录下加入一个C#脚本,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using OfficeOpenXml;
using System;
public class Script_08_02 {
[MenuItem("Excel/Write Excel")]
static void LoadExcel ()
{
//创建Excel文件
string path = Application.dataPath+ "/Excel/"+DateTime.Now.ToString("yyyy-MM-dd--hh-mm-ss")+".xlsx";
var file = new FileInfo(path);
using (ExcelPackage excel = new ExcelPackage (file)) {
//向表格中写入数据
ExcelWorksheet worksheet = excel.Workbook.Worksheets.Add("sheet1");
worksheet.Cells[1, 1].Value = "Company name1";
worksheet.Cells[1, 2].Value = "Address1";
worksheet = excel.Workbook.Worksheets.Add("sheet2");
worksheet.Cells[1, 1].Value = "Company name2";
worksheet.Cells[1, 2].Value = "Address2";
//保存
excel.Save();
}
AssetDatabase.Refresh ();
}
}
我们保存后可以发现工具栏发生了变化,多了一个Excel菜单,是通过C#脚本拓展得到的,
点开里面有一个WriteExcel.
点击就可以保存指定的数据啦.
这行语句表明了菜单的索引(多级目录),如不存在则为新建对应的目录.
[MenuItem("Excel/Write Excel")]
LoadExcel函数大家看一遍就大致知道这些语句是干嘛的了,此处不继续展开了~
小白扫盲区(大佬可跳过)
1.excel中常见的.xlsx和.xls格式有什么区别:
版本不同,xlsx是高版本,07版以后的拓展名都是xlsx,是用了新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名拓展名后面添加了x,使得占用空间更小.
xls格式的文件所有office程序都能打开,但.xlsx只有office2007或者更新的版本才能打开.