Unity3d 小试

先吐槽一下,windows 下找了一圈录屏软件,竟然没有一个好用的!最后没辙用的 斗鱼主播工具 录的下面视频。 哎 我又不是主播。。。

从 UnityStore 中导入资源

自 Unity 5 以后,标准资源包已经移动至 https://assetstore.unity.com/ 使用的话需从网页导入,而不再以前的这个

地方了。新版的需要在 https://assetstore.unity.com/ 输入搜索 Standard Assets 然后点击网页里的在unity 中打开。这样就会在 unity 界面出现这个网页,然后点击导入。

使用地形工具

首先导入地形对象

在这个界面中,先使用笔刷工具给导入的地形配上一张贴图

然后使用高度设定工具给地形设置一个默认高度, (地形高度最小为0 ,不设置默认高度的话无法降低地形) 点击 flatten 提升地面。

然后使用提升工具画出一条条群山。

再回到笔刷工具,我们添加第二张纹理,然后将部分地面刷成草地。

可以看出地面的一部分被刷成草地了。

然后使用smooth height 工具,在山头儿上刷几下,使其变得平滑。

下一步选择树木工具,为我们的地形上面画一些树木。

调整笔刷大小和密度,在场景中添加树木。

仔细调节场景,使其变得丰富起来。

添加第一人称控制器

Standard Assets 中已经为我们预制了第一人称控制器,我们将其拖转到场景中。 ps:先删除默认的摄像机

我们点击上方的 play 运行一下

W,A,S,D 可以控制人物的移动,我们的主角已经降临的场景中啦。

导入怪物资源

我们可以从 assetStore 中搜索 zombie 选取几款免费的资源当做备用。

将其导入至项目,然后将其的 “预制项” 拖入场景预览一下效果

还不错~。

我们要在僵尸头上放置一个血条,所以偷懒的我直接用 slide 组件了 :-)

然后在僵尸 zombie.cs 中声名 HP 属性 与 血条的 slide 组件引用:

public class Zombie : MonoBehaviour
{
    public int HP;
    public Slider slider;
}

为了使得僵尸一直看向主角,我们用 lookat 函数:

Vector3 newPos = new Vector3(
    Camera.main.transform.position.x, 
    gameObject.transform.position.y, 
    Camera.main.transform.position.z
    );
    gameObject.transform.LookAt(newPos);
    slider.value = HP;

射击判定

其实原理很简单,我们发射一条射线,如果在这条射线上碰撞到了任何物体,则产生碰撞回调:

RaycastHit hitInfo;
Transform pT = GetComponent<Transform>();
Ray ray = Camera.main.ScreenPointToRay(
    new Vector(Screen.width / 2, Screen.height / 2, 0)
);
Physics.Raycast(ray, out hitInfo, 3000f);
if (hitInfo.collider.gameObject.tag == "zombie")
{
    Zombie z = hitInfo.collider.gameObject.GetComponent<Zombie>();
    z.hit(20);
    GameObject b = Instantiate(blood);
    b.transform.position = hitInfo.point;
    b.transform.LookAt(gameObject.transform);
}

这样,碰撞信息会被储存在 hitInfo 中 hitInfo.collider.gameObject 就是碰撞到的物体。

这里我们要为僵尸设置碰撞体, Mesh Collision 虽然最逼真,但消耗太大,我们使用胶囊碰撞体。

这样可以稍稍兼顾性能与效果。

增加鲜血

我们先找到鲜血素材粒子效果,导入进项目

下面要做的是,当被击中后,将鲜血粒子附加到中弹的位置上。 上文中的 hitInfo.point 正是我们想要的。

GameObject b = Instantiate(blood); //创建鲜血粒子
b.transform.position = hitInfo.point; //将鲜血粒子移动至中弹位置

增加死亡动画

导入的僵尸素材是有动画,打开 animator control 我们可以找倒地的动画。有 idle fallingBack 等几个动画。

当僵尸的 HP 属性小于 0 时 我们播放 fallingback 动画。

void Update()
{
    ... ...
    if (!isDead)
    {
        animator.Play(aniDead);
        if (audioSourceRun.clip != audiodead)
        {
            audioSourceRun.clip = audiodead;
            audioSourceRun.loop = false;
            audioSourceRun.Play();
        }
        slider.gameObject.SetActive(false);
        Invoke("remove", 2);
        m.killed++;
        m.killedText.text = "kill:" + m.killed.ToString();
    }
    isDead = true;
    ... ...
}

添加 3D 声音

3D 声音可以随着主角(listener) 与音源的距离变化,自动调节声道的音量,达到逼真的效果。

会发现我们的 FPSController 中的 FirstPersonCharacter 有一个 Listener 组件。

下面我们在僵尸上增加一个 Audio Source 组件。

这样,僵尸的声音就会随着与主角距离的变化而变化了。

下载 Demo

脚本下载

留言:

称呼:*

邮件:

网站:

内容: