unity独立游戏开发日志2018/09/22

f::很头痛之前rm做的游戏在新电脑工程打不开了。。。只能另起炉灶。。。

还不知道新游戏叫什么名。。。暂且叫方块世界。(素材已经授权)

首先是规划下场景和素材文件夹的建立。

unity常用的文件夹有:Scripts(储存脚本),Scenes(储存场景),Animation(储存动画)等等。最重要的是Resources(这个不可以打错),因为在unity中可以通过Load Resources中的文件夹中按文件名寻找对应的资源。来进行动态生成。

像我这个游戏中的物体含有大量的重复(很多游戏中都存在,比如树木啊,花朵啊这些),都可以把他们拖到文件夹作为预制体(Prefab),这样可以统一定义他们的属性,非常方便,也易于管理。

除此之外,要善于建立空物体,空物体用处很大,可以作为父目录,可以当作游戏管理器,也可以挂载音乐等等。

今天碰到的几个值得注意的点和我所做的工作:

1.ui的问题,在这个版本的unity,建立ui物体,canvas的渲染模式有三种:

 

如果说把ui图片当作物体的话,就直接用world space就好了,直接在界面上拖,当作gameobject。

前两种,overlay相当于设置好了ui层摄像机,而camera的就是需要自己定义。这里涉及到layer和camera的渲染关系。

引用:https://blog.csdn.net/fdyshlk/article/details/78509909

2.今天的首要目的就是做一个模板,大致是,人物接近可采集的资源,资源上方出现提示图案,远离则图案消失,按相应键达2s采集资源,该资源消失,图标也消失。

所以大致思路是:

(1)建立一个ui图片的预制体,并在Awake的时候就初始化以待使用。

(2)将资源与主角进行碰撞检测,如果检测到,就将此图片显示到该物体的上方(设置一个offset来确定相对位置),并且激活图片的gameobject。

否则相反,该图片的组建暂时失去激活态。

(3)逐帧检测,在检测碰撞时,如果一直都在按正确的键,就播放相应的动画。(比如人用稿采集,石头碎裂,ui图片逐渐淡去)以及播放合适的音效。

如果到达了一定的时间就唤醒一个函数进行物品的结算和资源的组件销毁。这样完成了一次资源采集。

否则回到初始状态。

所以写了一个脚本,专门负责石头资源的采集(写好一个后,树木,其他资源的都可以套用一个就行了):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.ThirdPerson;

public class RockTip : MonoBehaviour {

    private GameObject UIImage;
    private GameObject uihelper;
    private Vector3 offset = new Vector3(0, 1.4f, 0);
    private bool canDig = false;

    private void Awake()
    {
        UIImage = (GameObject)Instantiate(Resources.Load("Prefabs/RockTip"));
        uihelper = GameObject.Find("ResourcesTip");

    }

    private void Update()
    {
        if (canDig){
            if (Input.GetKey(KeyCode.E))
            {
                Invoke("digdone", 1.9f);
                UIImage.transform.GetComponent<Animation>().Play();

            }
            else
            {
                CancelInvoke();
                UIImage.transform.GetComponent<Animation>().Stop();
            }
        }

    }

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.collider.tag == "Player")
        {
            UIImage.transform.parent = uihelper.transform;
            UIImage.transform.position = transform.position + offset;
            canDig = true;
            UIImage.SetActive(true);

        }
    }
    private void OnCollisionExit(Collision collision)
    {
        if (collision.collider.tag == "Player")
        {
            canDig = false;
            UIImage.SetActive(false);
        }
    }

    void digdone()
    {
        UIImage.SetActive(false);
        Destroy(this.gameObject);
    }

}

这里控制时间用了invoke的方法,在一直采集正确时,就会在1.9s后唤醒digdone的方法。而用invoke,想要结束他的话就只能用 CancelInvoke();了,它的意思是结束所用当前的invoke,这个在这里用没什么,因为比较

简单,只有一个其他的进程。

碰撞方面,我给岩石加了tag为rock,主角的tag为Player,这样来进行碰撞检测。(否则石头与地面碰撞也会显示图片)

动画方面,就是ui图片的变暗。调整在1.9s内,他的不透明度从255到0即可。在unity中就能自动生成动画。

人物方面的动画不是扎实,花了些功夫复习了一下。

这里用的人物模型是unity官方的第三人称控制器的预制体。为了添加一个我按e键进行采集的动作(动作很丑。。。当然就是为了测试嘛)需要在它的animator控制器中添加状态。

这里我添加了一个Action状态,然后新建了一个采集的动画,这里再ground(也就是地面的状态)和我的状态之间过渡。

需要新建一个属性值,我给他起名为isdig,true则迁移到action状态,false则迁移到ground状态。

这里要注意 尽量不勾选Has Exit Time ,如果勾选上,加上程序有些复杂和你自己电脑的运算等等,在演示过程中经常会出现反应慢的问题,动作不连贯。

所以取消了就好。

这里在官方的控制器脚本里临时加了一句,以后动作多了肯定要写成函数来管理的。

animator其实刚开始学很难理解,但是用起来非常好用,判断按键,判断变量,就能自动切换状态,播放状态中你想播放的动画。

最终效果:(没法用视频展示了。。。)

至于做动画。。。这是真的难。不过可以利用官方给的这个模型,我用的是3ds max,直接打开就可以。

然后做动画就不赘述了,动动骨骼,,设置关键帧等等。这些虽然麻烦,但是5.0的unity,你这么做,你做出来的动画相当于可以直接添加在你原有的模型上。

可以不断更新新的动作,而且不会出问题,因为它是根据骨骼来计算的,所以非常方便。

今天就到这~

原文地址:https://www.cnblogs.com/lixiaoyao123/p/9690511.html

时间: 2024-10-29 04:38:02

unity独立游戏开发日志2018/09/22的相关文章

unity独立游戏开发日志2018/09/26

最近太忙,今天吃饭的时候灵感一现...想到了随机地图生成的方法,不过可能实现的比较笨...还需要优化,大佬绕过. 注释没打,最后统一解释. using System.Collections; using System.Collections.Generic; using UnityEngine; public class StartMap : MonoBehaviour { private GameObject Bridge; private GameObject Cliff; private

Unity 2D游戏开发教程之精灵的死亡和重生

Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于是我们发现游戏里的精灵,即使是跳入“万丈深渊”,也依然存活,显然这种游戏逻辑无法让人接受.因此,本节就来说明为精灵添加死亡和重生这两种状态的方法,并使用脚本实现这两种状态的逻辑.具体的实现步骤如下: (1)在Hierarchy视图里,新建一个Empty对象,并命名为Death Trigger,设置其

Unity 2D游戏开发教程之游戏中精灵的跳跃状态

Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却无法从低的地面移动到高的地面,因为当前的游戏精灵只能左右移动,即left和right.为了解决这个问题,本节就来为精灵添加跳跃状态.   图2-14  精灵从一个地面移动到另一个地面 (1)如果要为精灵添加跳跃状态,即jump,就不得不再引入其它状态: q   landing:用于表示精灵接触到地面

Unity 2D游戏开发教程之使用脚本实现游戏逻辑

Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态.但是这其中还有一些问题.例如,我们无法使用键盘控制精灵当前要进入的动画状态,而且精灵也只是在原地播放动画而已.但我们希望精灵在进入到PlayerWalkingAnimation状态时,位置应该发生改变. 要解决这些问题,就需要编写脚本.也就是说,要使用脚本来实现动画的播放控制,以及其它一些游戏的逻辑

Unity 2D游戏开发教程之摄像头追踪功能

Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以及游戏逻辑的想象空间.看来有必要让精灵拥有更多的状态,而这就是本章要讲解的主要内容. 摄像头追踪功能 游戏里的精灵可以在游戏场景中任意移动,这没什么问题,可是这就导致了一个问题,就是精灵可能移动到我们的视野之外,或者说游戏视图之外.为了解决这个问题,很多游戏都采用了"摄像头追踪"的方法,使

Unity 2D游戏开发教程之游戏精灵的开火状态

Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 "开火"就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌人,而精灵最好具备开火的能力,否则会被敌人轻易干掉!具体的实现方法是: (1)导入一个表示子弹的图片到Unity,本示例中选用的子弹图片,名为PlayerBullet,如图2-23所示. 图2-23  导入到游戏项目的表示子弹的图片 (2)拖动此图片到Scene视图,即可在当前的游戏场景中

写给使用Unity进行游戏开发的建议

Unity是一款非常流行的游戏开发软件.它的功能令人印象深刻,也能够适应不同的游戏开发要求.游戏开发人员可以使用Unity创建任意类型的游戏,从世界级的RPG游戏到最受欢迎的增强现实游戏Pokemon Go.此外,许多初学者通用Unity来学习游戏开发或游戏编程. Unity的真正影响更加多样化,不论是对独立游戏开发人员或者共同完成某一个项目的的大型团队而言,它都是一个完美工具.它的生态系统也有助于其统一维护和朝着正确的方向发展.但是由于其复杂性---处理设计.脚本.调试和其方面---使得Uni

【Unity NGUI游戏开发之五】多分辨率下完美分布式协同开发

NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 案例 完美过程 案例分析 实现过程 开发问题: NGUI分布式开发中,用git管理资源,团队成员每人负责一个perfab,所有现对于屏幕大小的相对位置的perfab因为引用了perfab外的数据,导致perfab的Anchor锚点数据丢失,最后的perfab集成后,必须重新设置,导致开发成本大幅度

?Unity 2D游戏开发教程之2D游戏的运行效果

Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问,会在本节集中揭晓. (1)单击Unity上方,工具栏里的播放按钮,开始运行当前的游戏,默认精灵当前进入的是Idle动画状态,如图1-34所示. 图1-34  Idle状态 (2)当读者按下键盘上的左.右方向键,或者A.D键的时候,精灵会进入Walking动画状态,并且会向左或者向右移动,如图1-3