Unity之飞盘游戏设计思路

1:枪发射射线:主摄像机发射射线,到屏幕上某点(保存为ShooterPoint=hit.point)。


             1:使用方法:Camera.main.ScreenPointToRay(Input.mousePosition)生成射线


             2:射线检测方法:Physics.Raycast(ray,out hit),物理下面的一个检测射线碰撞的方法。hit保存着碰撞点信息。如:hit.transform。在碰撞检测方法中,我们就可以实现相应的操作了。


2:手臂指向(使用lookat方法,指向ShooterPoint),枪射线朝向(线渲染器方向起点为手臂point,终点为ShooterPoint)(整个思维是三维转换为二维)




3:飞盘被射击,破碎销毁:实施办法是飞盘某一个子物体被射线碰撞到后查找其父物体,然后给父物体下的所有子物体添加相应组件,产生重力,实现破碎效果。


             1:查找父物体:hit是开始点,通过hit.transform.parent就查找到父物体的transform组件。注:(为什么是transform下呢?因为最基本的空物体有的组件至少是transform。)


             2:为父物体下的子物体添加组件:没有方法直接给父物体的子物体添加组件,可以使用for循环为子物体添加组件。通过子物体transform数组,循环添加组件。方法:gameobject.AddComponent<>()。注:(为什么是gameobject下的,因为组件本身就是隶属于物体而存在的。)




4:飞盘每隔几秒随机出现:


             1:出现:我们使用实例化函数:Instantiate(gameobject,position)。外部方法定义为Creat


             2:随机:就是随机position,它是一个vector3类型的变量,那个new vector3(v1,v2,v3)  中三个参数就使用Romdom.Range方法实现随机。


             3:每隔几秒:使用方法InvokeRepeating来调用我们的实例化函数Creat,参数设置为,开始后第几秒调用,然后每隔几秒再次调用实例化方法Creat实例化飞盘。


5:生成飞盘后,我们让他们作为某个物体的子物体存在,设置父物体:Transform.SetParent(Transform)。第一个transform是子物体,第二个是父物体。


6:掉落后销毁飞盘:Destory():中第一个参数是gameobject,不是transform,也可以有第二个参数:多少秒之后销毁。




7:UI设计:      


             1:游戏管理器框架:
                    1:游戏状态枚举,使用枚举来区分enum GameState。


                    2:切换状态方法,参数是游戏状态枚举。通过if判断来选择不同的内容实现。这个方法的调用则在其他事件脚本中进行。


                    3:开始界面:鼠标点击事件中调用切换状态方法。
                            1:GAME状态中,应该将倒计时,分数这些UI显示出来。
                            2:并且武器可以移动了。
                            3:声音也在这一代码块中书写。
                            4:开始实例化飞盘出来。


                    4:倒计时与分数增加(不要实现数据的变化,在数据变化之后要将数据更新到UI上。):


                       1:倒计时:是游戏运行之后就开始,倒计时代码应该在Update中书写,每帧调用一次,可以实现累减操作。startTime为bool类型,所以对外创建一个接口,接口中修改startTime,让外界事件(如点击事件)调用这个接口,修改数据值。当startTime改变时,就在Update中实现:time -= Time.deltaTime;m_GUIText_Time.text = "时间:" + time + "秒";修改数据,和修改UI完成倒计时。


                       2:分数增加:是在射线碰撞到飞盘破碎后应该被调用的。字段和实现方法AddScore在本类中书写,调用在射线碰撞飞盘的脚本中书写,但字段值被修改之后,修改UI值。


                    5:倒计时结束切换到END状态显示相应数据:


                       时间time<0时,调用ChangeGameState方法,传递GameState.END参数,在END代码块中,应该显示最终分数值。点击重新开始切换到start状态中。这时用一个和GameStart一样的脚本GameReset即可。







你可能感兴趣的:(Unity,Game,Developing)