1,什么是单例?举一个游戏中使用单例的例子
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。
通过单例模式可以保证系统中一个类只有一个实例且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的队形只能存在一个,单例模式是最好的解决方案。
在游戏中,需要在多处频繁调用且只能保存一份儿的方法和属性,可以定义成单例,例如单机游戏的金币。
//饿汗式单例模式
public sealed class Singleton
{
private readonly static Singleton m_Instance = new Singleton();
private Singleton(){};
public static GetInstance()
{
if(m_Instance == null)
m_Instance = new Singleton();
return m_Instance;
}
};
二,Unity实现昼夜交替的方法或思路?
1,可以直接旋转灯光,
2,或者控制灯光的强度,写一个定时器控制即可。
3,可以通过控制一个DirectionalLight,根据游戏时间的流逝,改变位置和角度以及亮度来模拟太阳,来实现昼夜交替的变化。
4,最简单的方法插件实现Time of Day - Dynamic Sky Dome
5,在游戏设计时候看怎么设计了,可以交给美工做俩个半球一半白天一半黑天然后用时间控制球体恒转动。过度生硬不生硬就看美工了。
6,也可以RenderSettings.skybox = xxx 去渲染天空盒,RenderSettings.ambientLight的方法设置一下环境光来过度白天黑夜。
三,塔防游戏中(如保卫萝卜),地图的路径信息如何储存?让怪物沿着路径行走的方法是?
1,在地图关键的转弯位置放置一个cube,储存所有关键cube的坐标,即存储了地图的路径信息,怪物到达一个cube后旋转朝向下一个cube的位置,然后继续前进。
2,可以用预先烘焙好的路径点存储路点信息,让怪物使用NavMeshAgent组件,配合地图的路点信息,进行自动导航。
3,地图的路径信息可以将位置坐标以数组的形式存储起来,数组的元素是Vector2,在记录位置坐标的过程中,转折点坐标一定需要记录。让怪物沿着路径行走的方式就是将角色从一个位置移动到相邻的位置
4,塔防游戏大体分为两个部分第一是玩家建设区域第二是怪物活动区域,当然路径信息就属于活动区域,我们可以把活动区域分为起始点,活动点,终点。创建一个路径脚本定义当前点,下一点,设置下一点的方法。然后把脚本挂在每个节点上,再把每个节点设置Tag标签。游戏开始的时候就根据节点绘制路径。当然这只是一个简单的实现方法。
关于塔防游戏的路径算法还有很多,贪心,A*,Dijkstra算法-有加权边,Bellman-Ford算法-支持负权重,Floyd-Warshall算法等
5,通过将地图分割为二维数组来存储,路径可以根据情况存储为二维数组的行列索引。根据路径索引找到对应的路径,控制怪物依此行走。
四,《英雄联盟》中,带位移的技能能否穿越墙壁如何来判定?如闪现过墙/撞墙(以程序角度)有些同学表示这题没太懂,我解释下:就拿闪现来说,有些厚的墙,是闪不过去的,而稍微薄些的却可以。问题是,如何判断,这堵墙的厚度是否能够让我闪现过去?