第一步:安装Unity、Visual Studio 和 Lua
这三个东西的安装没什么好说的,去网上搜索下载,然后安装就好。
之所以要装 Lua,是因为大部分游戏开发,都会用 C# + Lua 来作为 U3D 脚本,因此一起装一下。
第二步:Unity 配置 Visual Studio 作为脚本开发工具
在Unity 菜单栏选择 Edit→Preferences... 打开 u3d 参数设置窗口,按下图所示进行设置:
第三步:新建一个名为HelloWorld的U3D工程
创建后的工程如下图所示:
一个新建的U3D工程,Hierarchy 视图中应该有一个名为的SampleScene的场景,其下有一个主摄像机(Main Camera)和一束直线光源(Directional Light)
现在,我们在“工程”视图的 Assets 文件夹上右键,然后选择 Create→C# Script 新建一个 C# 脚本,将其命名为Main(注意,U3D中创建的C#脚本会自动添加 .cs 后缀,因此脚本名只要写 Main 就可以,千万别写成 Main.cs)
然后,我们拖动 Main.cs 到 Hierarchy 视图中的 Main Camera 上松手,这样就将 Main.cs 脚本绑定到了主摄像机上。绑定了脚本的游戏对象,其 Inspector 视图中可以看到如下所示信息:
我们也可以先在Hierarchy 视图选中要绑定脚本的对象,然后将 Main.cs 拖动到 Scene 视图对应的物体上或 Inspector 视图中进行脚本绑定。我们还可以通过 Inspector 视图底部的 Add Component 按钮来添加脚本。
要删除对象绑定的脚本,只需要点击对象 Inspector 视图中,对应脚本最右侧的三个竖点,然后选择Remove Component 即可。
绑定完脚本之后我们按 Ctrl + S 保存一下,然后双击 Main.cs,在 VS 中打开脚本:
可以看到,Main.cs 中包含两个方法,它们作用如下:
void Start():在第一帧执行之前被调用,通常在这里做游戏对象的初始化
void Update():每一帧都被调用,通常在这里做游戏对象的运动变化
现在我们在 Start 方法中添加如下语句:
using UnityEngine;
public class Main : MonoBehaviour
{
//正方体对象
public GameObject cube;
// Start is called before the first frame update
void Start()
{
Debug.Log("This is my first project for Unity 3D.");
Debug.Log("Hello World!");
}
// Update is called once per frame
void Update()
{
}
}
保存后,我们点击VS中的 “附加到 Unity 并播放”,然后切换到 unity,可以看到,游戏已经开始播放,并在 Console 视图中输出了运行结果:
至此,unity 开发环境的搭建及 Hello World 的编写就已经结束了。下面我们再加一点内容,以帮助新手朋友了解,在 u3d 中脚本是如何控制游戏对象的:
在 Hierarchy 视图的 SmpleScene 上右键,按下图所示创建一个正方体
切换到 VS 的 Main.cs 代码编辑窗口,编辑 Main.cs,在类中新增一个 名为 cube 的变量,并在 Update 方法中添加使其旋转的方法,编辑后的代码如下:
using UnityEngine;
public class Main : MonoBehaviour
{
//正方体对象
public GameObject cube;
// Start is called before the first frame update
void Start()
{
Debug.Log("This is my first project for Unity 3D.");
Debug.Log("Hello World!");
}
// Update is called once per frame
void Update()
{
cube.transform.Rotate(Vector3.up * 1);
}
}
切回 Unity,选中 Hierarchy 视图里的 Main Camera,在 Inspector 视图中我们可以看到 Main 中新增的 cube 属性:
把 Hierarchy 中的 Cube 对象拖动到 cube 属性处松手,Cube对象即绑定到了 cube 属性,此时 Main::Update 方法中的代码就可以控制 Cube 对象旋转了,点击 unity 中的播放按钮看看效果:
下面,我们来为这个正方体添加鼠标点击事件,了解一下u3d的事件系统:
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using static UnityEngine.EventSystems.EventTrigger;
public class Main : MonoBehaviour
{
//正方体对象
public GameObject cube;
//事件处理器委托类型
public delegate void EventHandler(BaseEventData data = null);
// Start is called before the first frame update
void Start()
{
Debug.Log("This is my first project for Unity 3D.");
Debug.Log("Hello World!");
//为主摄像机添加物理投射器,这个东西是用来找出交互点(鼠标点击或者触摸位置)
//之下哪些对象应该接收交互事件的。你可以把它想象成是一束穿过摄像机镜头和交互
//点的光线,被这束光线照射到的对象就是可以接收事件的对象。
if (gameObject.GetComponent<PhysicsRaycaster>() == null)
{
gameObject.AddComponent<PhysicsRaycaster>();
}
//为主摄像机添加事件系统,这个东西是事件的管理者,它负责从 InputModule 接收交
//互输入,然后从PhysicsRaycaster 去找出事件接收者,最后将事件交给相应委托者去
//执行
if (gameObject.GetComponent<EventSystem>() == null)
{
gameObject.AddComponent<EventSystem>();
}
//为主摄像机添加独立输入模块,这个东西是用来接收鼠标、键盘等输入的
if (gameObject.GetComponent<StandaloneInputModule>() == null)
{
gameObject.AddComponent<StandaloneInputModule>();
}
//为正方体添加事件监听
AddClickEvent(cube, OnCubeClick);
}
//为指定目标添加点击事件
public void AddClickEvent(GameObject go, EventHandler handler)
{
//为方块添加事件触发器
EventTrigger et = go.GetComponent<EventTrigger>();
if (et == null)
{
et = go.AddComponent<EventTrigger>();
}
Entry entry = new Entry();
entry.eventID = EventTriggerType.PointerClick;
entry.callback.AddListener(new UnityAction<BaseEventData>(handler));
//清除原来的触发器
et.triggers.Clear();
//添加接收鼠标点击的触发器
et.triggers.Add(entry);
}
//正方体点击事件处理器
private void OnCubeClick(BaseEventData data = null)
{
Renderer renderer = cube.GetComponent<Renderer>();
renderer.material.color = RandomColor();
}
//随机生成一个颜色对象
private Color RandomColor()
{
//随机生成 RGB 颜色通道值
float r = Random.Range(0f, 1f);
float g = Random.Range(0f, 1f);
float b = Random.Range(0f, 1f);
return new Color(r, g, b);
}
// Update is called once per frame
void Update()
{
cube.transform.Rotate(Vector3.up * 1);
}
}
保存后运行 unity,然后点击方块,可以看到方块每被点击一次就随机改变一个颜色:
添加事件还有其它很多方式,比如下面这种:
在 VS 中编辑 EventTest,新增 OnClick 事件处理器
using UnityEngine;
public class EventTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void OnClick()
{
Debug.Log("椭圆体被点击");
}
}
然后再点击 Add Component 为椭圆添加事件触发器
点击事件触发器下面的 Add New Event Type,为触发器添加 PointerClick 事件
然后再点事件触发器中的 + 为触发器关联脚本
完全弄好之后事件触发器这里应该下图所示的样子:
这时候运行游戏,点击椭圆就可以看到效果了: