Unity实践项目——Darkwonder(3D)

时间一晃而过,接触Unity也有一段时间了,这期间断断续续,做了一些小东西。虽然学的不多,但是有一点算一点嘛,就把这段时间跟随教程做的实战项目进行一些整理,以作记录。这是这次整理的第一篇,就整理一下Darkwonder吧,siki老师给的中文名是“黑暗奇侠”,虽然流程很简单,但好歹也算是RPG,作为RPG爱好者的我,就用这个作为开端吧。

  • 故事背景

故事发生在很久很久之前……其实流程十分简短,就是小女孩被坏人抓走,然后小精灵从家里出发历经千辛万苦拯救女主的故事。(故事虽然俗套,但是实践操作学东西才是重点)

  • 游戏流程

游戏开始时,玩家在一个木屋前,这就是起点。玩家控制的角色是屏幕中央的小精灵。

Unity实践项目——Darkwonder(3D)_第1张图片

从家里出发沿着小路走一段距离会看到一个修炼场(四周有符文石,闪闪发光)。

Unity实践项目——Darkwonder(3D)_第2张图片

然后继续沿着小路前进会来到一片住着很多巨魔的树林,不过他们并不会攻击小精灵。继续深入。

Unity实践项目——Darkwonder(3D)_第3张图片

过了一座桥之后会发现一只在路边休息的恐龙,但这些目前来说都是无关紧要的,继续走就对了。

Unity实践项目——Darkwonder(3D)_第4张图片

最后到达了一排围栏处,再也无法前进,小精灵听到里面传来的小女孩的呼救声,但是被围栏阻挡无法进入。小精灵灵机一动(手动狗头),恐龙应该可以破坏这些围栏,于是就往回走前去寻求恐龙的帮助。

Unity实践项目——Darkwonder(3D)_第5张图片

回到恐龙休息的地方之后,小精灵向他表明自己的请求。但恐龙并不提供免费帮助,他想要小精灵给他找一些吃的。

Unity实践项目——Darkwonder(3D)_第6张图片

于是小精灵想到了之前树林里的巨魔和之前的修炼场……那就开始刺激的打怪吧!首先回到修炼场中学习第一个(也是唯一一个)技能。

习得神功之后杀进树林,击杀巨魔之后随机掉落巨魔肉,集满十块巨魔肉就可以去找恐龙帮忙。

Unity实践项目——Darkwonder(3D)_第7张图片

回到恐龙休息的地方,把巨魔肉上交给恐龙,他就会欣然帮助小精灵。

Unity实践项目——Darkwonder(3D)_第8张图片

这时玩家就获得了恐龙的控制权,可以在小精灵和恐龙之间切换控制。

Unity实践项目——Darkwonder(3D)_第9张图片

然后控制恐龙走到围栏处,根据提示破坏围栏后再切换到小精灵进去就能救出无助的小女孩了!

Unity实践项目——Darkwonder(3D)_第10张图片

至此游戏结束。

  • 总结

虽然是个非常简短且剧情俗套的小游戏,很多方面也很粗糙,比如几乎没有GUI、操作提示很简陋、视野控制没有完善等等。但也算是我的第一个RPG游戏开发案例,作为RPG粉丝的我对此十分自豪。这个案例是在刚接触Unity时作为入门练习做的,在其中学到了很多Unity开发的基础,如粒子系统、任务控制、利用Collider进行交互等,并且在代码逻辑中对Unity脚本中Start() 、Update() 等方法的巧妙设定有了一些理解。能够将实践融入学习是一种很好的方法,当初学习了一段时间C#的基础语法,那是初次接触面向对象语言,虽然充满了好奇,但是语法熬多了总觉得有那么一些枯燥,也不知道以后能用在什么地方。但是有了案例实践不仅巩固了学到的知识,同时还能激发自己的学习兴趣,也能从中得到一些小小的成就感。之后会继续把目前做完的案例进行总结、复习,以此记录我的学习路径。这仅仅是开始,学习的道路仍旧漫长,希望这份对编程的热爱能够一直保持下去!

在此特别感谢siki学院(www.sikiedu.com)提供的视频教程!

演示视频:http://player.youku.com/player.php/sid/XNDA4OTE4OTM4OA==/v.swf

项目链接:https://github.com/KazeLv/DarkWonder-3D-_unity

 

  • 要点笔记

基础知识:
    粒子系统(Particle System):
        Particle System(粒子系统基本设置)
            duration 持续时间(每次发射的周期)
            Looping 循环开关
            Prewarm 预热(让粒子在刚开始发射时就充满整个发射空间)
            Start Delay 开始后等待多少秒再发射粒子
            Start Lifetime/Speed/Size/Rotation/Color 粒子的生命周期/速度/大小/旋转/颜色
        Emission(发射;排放)
            Rate 每秒发射的粒子数
            Bursts 爆发效果,设置在每个周期的第几秒发生爆发且可以设置爆发数目的范围
        Shape(发射扩散器的形状)
            Shape 形状
            Angle 角度
            Radius 半径
            Emit from 选择发射源
        Renderer(渲染器)
            Material 为粒子添加材质
    灯光(Light)
        Directional Light 直射光;平行光
        PointLight 点光源
        SpotLight 聚光灯(锥形光源,可模拟手电筒等)
        AreaLight 面光源
    Unity C# Monobehaviour中的几个重点方法解析
        Awake 只在脚本被加载(游戏运行)的时候调用
        Start 游戏的初始化,在Awake之后
        update 游戏运行过程中不定时地调用
        fixedUpdate 游戏运行过程中以固定间隔调用(区别于update)
        lateUpdate 在update调用完成之后调用
    Time计时类
        Time.deltaTime 上一帧到这一帧的间隔时间
    GameObject
        属性 tag
             name
        方法 SetActive
        如何查找GameObejct
             1、拖拽赋值
             2、查找
             GameObject.Find(string)    find by name
             GameObject.FindGameObjectsWithTag(string)    find by tag(return array)
             GameObject.FindWithTag(string)    find by tag
        GetComponent可以对游戏物体使用也可以对其中的组件使用,效果都是在整个游戏物体中搜索
    transform.forward和Vector3.forward;
        都表示一个三维向量,transform.forward表示当前游戏物体的z轴方向(0,0,1)Vector3.forward表示世界坐标的z轴方向(0,0,1)
    StartCoroutine(调用协程)    
    void OnGUI(){};  绘制GUI(每一帧绘制一次)
        Rect r=new Rect(left,top,width,height)
        GUI.Label(Rect position,string message) 绘制消息
        GUI.Button(Rect position,string name)  绘制按钮(有返回值,返回bool表示按钮是否被按下)
    .SendMessage(string methodName)  搜索这个gameObject上的所有component中的名叫methodName的方法,然后调用;

组件:
 CharacterController(角色控制器)  包含rigidbody和collider
    Slope Limit 能够爬上的最大坡度
 Audio Listener 相当于耳朵,一般一个游戏场景只会有一个,是游戏声音的接收器
 Audio Source  声音源


调用方法:
    任何Component(Unity内置的和自定义的脚本)都可以使用.gameObject访问其挂载的游戏物体
    void OnTriggerEnter/Stay/Exit 触发器接触函数
    Input.GetKey("") 监听键盘按键,按键要小写
    Input.GetMouseButton() 监听鼠标,0,1,2分别表示左键,右键和中键
    Input.GetButton(

你可能感兴趣的:(Unity征程)