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(, 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的更多相关文章
- unity独立游戏开发日志2018/09/26
最近太忙,今天吃饭的时候灵感一现...想到了随机地图生成的方法,不过可能实现的比较笨...还需要优化,大佬绕过. 注释没打,最后统一解释. using System.Collections; usin ...
- unity独立游戏开发日记2018/09/27
今天优化了下昨天的代码,并且添加了树木和其他资源的生成.还修复了接近石头后,挖掘图标不出现的bug.目前可以在unity中稳定60-70fps. 详看文章:https://www.cnblogs.co ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
- Unity 2D游戏开发教程之摄像头追踪功能
Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- Unity 2D游戏开发教程之游戏精灵的开火状态
Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- Unity 3D游戏开发学习路线(方法篇)
Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.Uni ...
- 2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language
老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这 ...
随机推荐
- solidity语言11
函数修饰符 pragma solidity ^0.4.11; contract owned { address owner; // 构造函数 function owned() public { own ...
- March 3 2017 Week 9 Friday
Each time you love, love as deeply as if it were forever. 如果爱,请深爱,就像能到地老天荒. If we can only encounter ...
- python 带BOM头utf-8的响应解码
接口响应编码格式为带BOM头utf-8.直接获取响应的text出现乱码. '''dinghanhua2018-11requests text与content,指定响应的encoding''' api ...
- 最新DNS汇集
最近几日DNS大规模抽风,网络环境是一天比一天恶劣,于是收集了一些良心的DNS服务器地址,以备不时之需. 国内服务器: 1.OpenerDNS:42.120.21.30 2.114DNS:114.11 ...
- Android(java)学习笔记5:线程的生命周期
1. 我们学习线程本质就是学习如何开始线程和终止线程.下面这个关于线程的生命周期图,要牢记: 新建状态:当程序使用new关键字创建了一个线程之后,该线程就处于新建状态.此时和其他Java对象一样,它仅 ...
- python:进程操作
一.多进程应用 import socket from multiprocessing import Process def talk(conn): conn.send(b'connected') re ...
- 动态规划(DP),0-1背包问题
题目链接:http://poj.org/problem?id=3624 1.p[i][j]表示,背包容量为j,从i,i+1,i+2,...,n的最优解. 2.递推公式 p[i][j]=max(p[i+ ...
- CF666E 【Forensic Examination】
题目 每天一道\(SAM\)真是非常开心 一看就是广义\(SAM\)+线段树合并了 我们存好\(S\)串每一个前缀的终点,之后在\(parent\)树上倍增找到表示\(S[l,r]\)这个子串的节点, ...
- POJ 3020 Antenna Placement 【最小边覆盖】
传送门:http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total ...
- js中json对象取键和值
1.json中输出各个键值: var ohp = {"星期一":18,"星期二":16,"星期三":19,"星期四":1 ...