unity独立游戏开发日志2018/09/26
最近太忙,今天吃饭的时候灵感一现。。。想到了随机地图生成的方法,不过可能实现的比较笨。。。还需要优化,大佬绕过。
注释没打,最后统一解释。
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class StartMap : MonoBehaviour {
private GameObject Bridge;
private GameObject Cliff;
private GameObject Dirt;
private GameObject Grass1;
private GameObject Grass2;
private GameObject Rock;
private GameObject Sand;
private Vector3 location;
private float xpos, ypos, zpos;
private int randnum;
private GameObject selectedobject;
private bool iscompeleted = false; // Use this for initialization private void Start()
{
Time.timeScale = ;
createmap();
} private void Update()
{
if(iscompeleted)
{
Time.timeScale = ;
} } void RenewPrefab()
{
Bridge = (GameObject)Instantiate(Resources.Load("Prefabs/Bridge"));
Cliff = (GameObject)Instantiate(Resources.Load("Prefabs/Cliff"));
Dirt = (GameObject)Instantiate(Resources.Load("Prefabs/Dirt"));
Grass1 = (GameObject)Instantiate(Resources.Load("Prefabs/Grass1"));
Grass2 = (GameObject)Instantiate(Resources.Load("Prefabs/Grass2"));
Rock = (GameObject)Instantiate(Resources.Load("Prefabs/Rock"));
Sand = (GameObject)Instantiate(Resources.Load("Prefabs/Sand")); } void createmap()
{
for (xpos = -; xpos <= ; xpos++)
{
for(zpos = -; zpos <= ; zpos++)
{
RenewPrefab();
randnum = Random.Range(, );
SelectPrefab(randnum);
selectedobject.transform.position = new Vector3(xpos, ypos, zpos);
if(xpos == - && zpos == -)
{
iscompeleted = true;
}
}
} } private void SelectPrefab( int rand)
{
if ( < rand & rand < )
{
selectedobject = Bridge;
}
else if ( <= rand & rand < )
{
selectedobject = Cliff;
}
else if( <= rand & rand < )
{
selectedobject = Dirt;
}
else if ( <= rand & rand < )
{
selectedobject = Grass1;
}
else if ( <= rand & rand < )
{
selectedobject = Grass2;
}
else if ( <= rand & rand < )
{
selectedobject = Rock;
}
else
{
selectedobject = Sand;
} } }
这里的逻辑就是:首先用unity的load方法,获取文件夹中的资源(这些资源是prefab),获取之后,就进行随机数判断,这里可以设定各种图块的比例
,根据数字范围就可以。然后整个流程都在一个循环中,这个循环控制着平面的位置,可以想象成遍历二维数组,一行一行的每个位置随机生成。
不过目前还是只有一层,高阶层的还没想好。还有一点就是,木桥的方块需要着重考虑它的方向和出现位置。最后就是随机数这个方法应该有更好的来
进行,有个随机种子,这样随机性可能会更强。
哦对了,这样生成的话,unity可能会很卡,需要解决一下这个优化问题。也许可以考虑异步之类的。。。之后再想。

最后是比较简单的,鼠标按住右键平移可以移动镜头,滚轮可以拉近拉远镜头。这个就是一堆参数,摄像机获取位置改变,很简单。
这个会应用在建造模式上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class MouseCamera : MonoBehaviour { // 将脚本挂载到摄像机上 public float moveSpeed = ; // 设置相机移动速度
public float minFov = 15f;
public float maxFov = 90f;
public float sensitivity = 10f; void Update()
{
// 当按住鼠标右键的时候
MouseRight();
//滚轮操作
MouseTurn();
} void MouseRight()
{
if (Input.GetMouseButton())
{ // 获取鼠标的x和y的值,乘以速度和Time.deltaTime是因为这个可以是运动起来更平滑 float h = Input.GetAxis("Mouse X") * moveSpeed * Time.deltaTime; float v = Input.GetAxis("Mouse Y") * moveSpeed * Time.deltaTime; // 设置当前摄像机移动,y轴并不改变 // 需要摄像机按照世界坐标移动,而不是按照它自身的坐标移动,所以加上Spance.World this.transform.Translate(h, , v, Space.World); }
} void MouseTurn()
{
float fov = Camera.main.fieldOfView;
fov += Input.GetAxis("Mouse ScrollWheel") * sensitivity;
fov = Mathf.Clamp(fov, minFov, maxFov);
Camera.main.fieldOfView = fov; }
}
今天就这样,要好好想想随机地图的问题。。。
unity独立游戏开发日志2018/09/26的更多相关文章
- unity独立游戏开发日志2018/09/22
f::很头痛之前rm做的游戏在新电脑工程打不开了...只能另起炉灶... 还不知道新游戏叫什么名...暂且叫方块世界.(素材已经授权) 首先是规划下场景和素材文件夹的建立. unity常用的文件夹有: ...
- 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 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
随机推荐
- 一个简单的 HTML 文档,带有最基本的必需的元素
<html> <head> <title>文档的标题</title> </head> <body> 文档的内容... ... & ...
- YUV数据详解
http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed.对于planar的YUV ...
- ZooKeeper 典型应用场景-数据发布与订阅
ZooKeeper 是一个高可用的分布式数据管理与系统协调框架.基于对 Paxos 算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得 ZooKeeper 可以解决很多分 ...
- vue+node+mongoose踩过的坑
1.当你在cmd中输入npm run dev的时候,出现这种错误 很有可能是目前的端口被占用了,可以把所有可能用到这个端口号的应用关闭或者你直接改一个新的端口号 修改端口的方法:新打开一个cmd,然后 ...
- 【转载】SSH login without password 免密登陆
Your aim You want to use Linux and OpenSSH to automate your tasks. Therefore you need an automatic l ...
- 使用ToDateTime方法转换日期显示格式
实现效果: 知识运用: Convert类的ToDateTime方法:(将字符串转化为DateTime对象) public static DateTime ToDateTime(string value ...
- 【luogu P3178 [HAOI2015]树上操作】 题解
题目链接:https://www.luogu.org/problemnew/show/P3178 模板题 菜 #include <cstdio> #include <cstring& ...
- 10474 - Where is the Marble?(模拟)
传送门: UVa10474 - Where is the Marble? Raju and Meena love to play with Marbles. They have got a lot o ...
- 推荐几个Mac/Linux下比较好用的工具
1.Tmux,连接开发机可以让在任务在开发机一直执行,不用nohup &这种了也相对稳定,还有session可以记录当时的状态. 常用命令: tmux new -s name 指定名字开启一个 ...
- sql server 语句获取表的描述,主键等等
sql语句添加表,字段的描述 --添加表的描述 --格式如右:execute sp_addextendedproperty 'MS_Description','字段备注信息','user','dbo' ...