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游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
随机推荐
- github代码上传教程
github 上传代码步骤 一.git以及Github Git是个正快速成长的版本控制系统,它由GitHub维护. 优势: 1.支持离线开发,离线Repository. 2.强大的分支功能,适合多个独 ...
- 在科技圈不懂“机器学习”?那你就out了
当联网的终端设备越来越多时,产生的信息数据也将呈指数式增长,大型.复杂.增长快速的数据收集已经无处不在.而机器学习能够扩增这些数据的价值,并基于这些趋势提出更广泛的应用情境. 那么,被人们津津乐道的机 ...
- 多线程 更新 winform 控件的值,以避免UI线程的卡顿
委托 private delegate void UpdateDGV_AddRes_CallBack(Int32 i,bool Res); 函数实现 private void UpdateDGV_De ...
- Sql根据经纬度算出距离
SELECT ISNULL((2 * 6378.137 * ASIN(SQRT(POWER(SIN((117.223372- ISNULL(Latitude,0) )*PI()/360),2)+CO ...
- Browser进程和浏览器内核(Renderer进程)的通信过程
看到这里,首先,应该对浏览器内的进程和线程都有一定理解了,那么接下来,再谈谈浏览器的Browser进程(控制进程)是如何和内核通信的, 这点也理解后,就可以将这部分的知识串联起来,从头到尾有一个完整的 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
- 使用pm2自动化部署node项目
1.pm2简介 pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡 ...
- python课程笔记
python变量原理:以数值为主,数字存储在内存中,分配给不同的变量.与C刚好相反 Python中,有3种内建的数据结构:列表.元组和字典.1.列表 list是处理一组有序项目的数据结构,即你 ...
- 函子(Monad)新解:函子定义了一个类型(泛型)和建立在这个类型上的一组运算符
这组运算符和代数中的运算加减乘除运算符一样,符合一定的定律:结合律.(交换律)等: 函数式编程的核心(底层支持)就是这些类型和运算符的定义. 函子就是定义这些类型和运算符的(). 运算符通常为单目运算 ...
- 【luogu P3388 割点(割顶)】 模板
题目链接:https://www.luogu.org/problemnew/show/P3388 #include <cstdio> #include <cstring> #i ...