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(, 1.4f, );
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,你这么做,你做出来的动画相当于可以直接添加在你原有的模型上。

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

今天就到这~

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

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

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

  2. unity独立游戏开发日记2018/09/27

    今天优化了下昨天的代码,并且添加了树木和其他资源的生成.还修复了接近石头后,挖掘图标不出现的bug.目前可以在unity中稳定60-70fps. 详看文章:https://www.cnblogs.co ...

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

    Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...

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

    Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...

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

    Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...

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

    Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...

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

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

  8. Unity 3D游戏开发学习路线(方法篇)

    Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.Uni ...

  9. 2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language

    老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这 ...

随机推荐

  1. 【C++ Primer】详解C++和C中的float中的有效数字

    在<C++ Primer>第二章中,2.1.1讲到float型的最小尺寸是6位有效数字.这里对“有效数字”的概念产生疑问,故有了以下内容.        首先,float的“尺寸”的意思是 ...

  2. Win7 自带FTP将文件复制到FTP服务器时发生错误。

    错误截图: 错误信息: 将文件复制到FTP服务器时发生错误.请检查是否有权限将文件放到该服务器上. 详细信息: 200 Type set to I. 200 PORT commad successfu ...

  3. May 22nd 2017 Week 21st Monday

    The biggest adventure you can take is to live the life of your dreams. 你能经历的最大的冒险,就是过上你梦想的生活. Just l ...

  4. 如何证明CRM WebClient UI上的应用是有状态(Stateful)的

    随便找一个在CRM WebClient UI里会被频繁调用到的函数,在函数里创建一个隐式增强,打印当前的会话ID. 不关闭浏览器,在浏览器里不断做操作,可以观察到不管做任何操作,每次断点出发后,打印出 ...

  5. python入门24 json模块

    现在很多接口传参和响应都是json串. json.dumps()  python对象转化为json字符串 json.loads()  json字符串转化为python对象.[]转变成list,{}转变 ...

  6. C++ decltype类型说明符(尾置返回类型使用)

    转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...

  7. BZOJ1718:[USACO]Redundant Paths 分离的路径(双连通分量)

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  8. cftool拟合&函数逼近

    cftool拟合&函数逼近 cftool 真是神奇,之前我们搞的一些线性拟合解方程,多项式拟合,函数拟合求参数啊,等等. 已经超级多了,为啥还得搞一个cftool拟合啊?而且毫无数学理论. 如 ...

  9. 【转】Dalvik虚拟机的启动过程分析

    在Android系统中,应用程序进程都是由Zygote进程孵化出来的,而Zygote进程是由Init进程启动的.Zygote进程在启动时会创建一个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程 ...

  10. java常见验证邮箱、电话号码、日期等格式

    package besttone.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 90%的验证 ...