Unity3D入门案例——古墓探险

新建工程

在这里插入图片描述

导入资源

资源链接 提取码5n92
下载完成之后直接将拖转到 Project 面板。

同时导入Unity3D自带资源
如何引入资源

设计地形

1.新建 Terrian:在 Object 面板,右键 3D Object --> Terrian.
2.观察 Terrian 的 Inspector 面板,在设置选项(最右面螺母标志)Terrian Width 和 Terrian Length 调节场景长宽。
3.利用第1/2/3/4个选项设计地形,利用5/6选项卡绘制地貌(植被,湖泊等)功能如下:

选项卡作用
Raise and lower terrain绘制地形表面凹凸程度;如在绘制过程按下Shift则将地形向下凹陷。
Paint height绘制地形高度
Smooth the terrain height对地形表面进行平滑处理
Paint the terrain texture绘制地形表面贴图

Unity3D设计地形详解

在这里插入图片描述

4.利用Unity3D自带资源进行植被的贴图。
点击package—>meshes—>prefabs/vegetations 引入预制体进行设计。
建议:相同形状或相同种类的预制体建议放在同一文件夹下,便于管理。

场景一:(只是一个练习)

场景二:(游戏场景)
在这里插入图片描述

美化场景

添加火焰(粒子效果)

1.添加灯光效果:引入多个点光源(可设置为不同颜色),同时调整原有平行光的角度,使画面有一种黄昏的感觉。

2.添加石墩与火把容器 package—>meshes—>prefabs,并在容器中放置点光源,调整。同时为点光源新建 effects --> Particle System。

3.对火把进行贴图 LightMapping。在 FX–Fire 文件夹下新建材质球,shader 设置为 Particles/Additive,贴图设为 flame4*4,背景设置为白色。

在这里插入图片描述
4.进入Particle System的 Inspector面板,进行参数的设置与调节。主要调节的参数如下打勾选项:

在这里插入图片描述
粒子特效参数详解上
粒子特效参数详解下

效果如下:
在这里插入图片描述

创建动画

1.灯光烘焙(可选):
1)勾选地形和灯光属性面板中的 Static。
2)点击window --> Lighting --> setting,获得 Lighting 界面,可与 Inspector 面板合并。
3)选中除火把以外的其余点光源,Inspector 面板 Mode 设置为 Baked。
4)在 Lighting 面板点击 generate lighting。当烘焙结束后,可将光源Inspector 属性面板中的灯光效果关闭,这样仍然会有灯光效果。

2.创建动画
1)点击火把点光源,Mode设为 Mixed
2)点击windows-> Animation -> Create -> Add Property,选择 Intensity。点击录制(功能栏红点),在不同时间点处,任意设置光源的 Intensity,为了效果更佳明显,数值波动可以大一些。
在这里插入图片描述动图效果如图:
在这里插入图片描述

导航场景

生成导航网格

1.新建 Navigation 面板:Window -> Navigation,可与其他面板合并。

2.场景烘焙:点击 Navigation 面板,选择Bake -> Bake。在烘焙之前要确保环境的Static是勾选上的(至少要保证Navigation Static是勾选上

3.细节处理
1)如果规定可以穿过植被,选中植被,在 Navigation -> object 面板取消Navigation Static 的勾选。
2)如果不想穿过某一物体(例如岩石),在 Navigation -> object 面板的 Navigation Area 选项卡选择 Not Walkable。如下图:

控制人物行走

1.点击英雄,在人物身上添加 Nav Mesh Agent 组件,并调节包裹人物的圆柱体。圆柱体用来计算是否可以通过地域。

2.新建脚本“Hero”添加到英雄身上,利用鼠标控制英雄移动。

public class Hero : MonoBehaviour
{
    public UnityEngine.AI.NavMeshAgent agent;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))//只有当鼠标点击时,需要进行检测,0表示鼠标左键
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//获取射线。ScreenPointToRay将屏幕坐标转换成射线,通过鼠标点击进行屏幕坐标获取
            RaycastHit hit;//用来保存碰撞信息
            if (Physics.Raycast(ray, out hit)) //用来检测碰撞信息,传一个射线,再传一个输出
            {
                print(hit.point);//此时点击地面Console会出现相应的坐标destination来对目标位置进行设置
                agent.SetDestination(hit.point);//使用
            }
        }
    }
}

3.点击 Hero,在 Inspector 面板 Hero 组件中修改 Agent。

在这里插入图片描述

控制摄像机跟随

1.调整摄像机角度
2.创建脚本Follow Target,作为摄像机的组件,代码如下:

public class Followtarget : MonoBehaviour 
{
    public Transform hero;
    private Vector3 offset;

	void Start () {
        offset = transform.position - hero.position;
	}
	
	void Update () {
        transform.position = offset + hero.position;
	}
}

3.点击 Camera,在 Inspector 面板 FollowTarget 组件中修改。

在这里插入图片描述

角色动画播放

创建状态机

1)在 Project 面板创建 Animator Controller,命名为 Hero Controlller 用来控制人物的动画。
2)点击Hero,将状态机拖拽到组件 Animator–Controller 中。

在这里插入图片描述
3)选中 Hero 选择 window - Animator,将动画素材拖入素材界面。
在这里插入图片描述4)如图所示,新建变量 speed,类型为float。

在这里插入图片描述
5)在素材界面,点击状态框,右键 Make Transition,建立状态转换。点击右下角“+”引入变量,进行转换界限的速度设置。

在这里插入图片描述
界面上的hasExitTime:是否有状态退出时间。简单理解:开启表示等待当前动画进行完才可进行下一个动画;关闭表示可以立即打断当前动画并播放下一个动画。

6)点击 Hero,在 Inspector 面板 Animator 组件中修改 Controller,在 Hero 组件中修改 Anim。

在这里插入图片描述

此时点击播放,发现角色移动时没有发生变化。需要引入速度监听。

修改代码

public class Hero : MonoBehaviour
{
    public UnityEngine.AI.NavMeshAgent agent;
    public Animator anim;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))//只有当鼠标点击时,需要进行检测,0表示鼠标左键
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//获取射线。ScreenPointToRay将屏幕坐标转换成射线,通过鼠标点击进行屏幕坐标获取
            RaycastHit hit;//用来保存碰撞信息
            if (Physics.Raycast(ray, out hit)) //用来检测碰撞信息,传一个射线,再传一个输出
            {
                print(hit.point);//此时点击地面Console会出现相应的坐标destination来对目标位置进行设置
                agent.SetDestination(hit.point);//使用
            }
        }
        anim.SetFloat("speed", agent.velocity.magnitude);//只需要获取速度的大小
    }
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值