Unity3D开发环境搭建、脚本绑定和事件监听

第一步:安装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 事件

 

然后再点事件触发器中的 + 为触发器关联脚本

 

 

完全弄好之后事件触发器这里应该下图所示的样子:

这时候运行游戏,点击椭圆就可以看到效果了:

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值