[unity3d]巡逻兵小游戏

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mozi_momo/article/details/80286958

巡逻兵游戏

  • 游戏设计要求:

    • 创建一个地图和若干巡逻兵;
    • 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
    • 巡逻兵碰撞到障碍物如树,则会自动选下一个点为目标;
    • 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
    • 失去玩家目标后,继续巡逻;
    • 计分:每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束。
  • 程序设计要求:
    • 必须使用订阅与发布模式传消息、工厂模式生产巡逻兵

完成效果图

这里写图片描述

实现过程

代码部分有一些参考了学长们之前做的游戏,对初学者而言真的是帮助很大。在一些不够完善的细节上我加上了自己的一些设计,学到了不少东西。

在asset store里下载了可用的人物和小僵尸模型(挑了好久才挑出这么可爱的),加上动画和状态机设置让人物动起来。
人物chara的状态机如下,主要有idle和run两种状态,以及是否存活:
这里写图片描述

僵尸patrol的状态机如下,与人物相比,多了巡逻时的walk状态,当发现玩家时从walk状态变为run,速度加快;由于巡逻兵不会死亡,因此不需要增加die:
这里写图片描述

实现人物移动时,当人物与墙发生碰撞、与巡逻兵发生碰撞时都会受到外力作用,因此位置会改变。防止碰撞带来的作用部分如下:

if (this.transform.localEulerAngles.x != 0 || this.transform.localEulerAngles.z != 0){
    this.transform.localEulerAngles = new Vector3(0, this.transform.localEulerAngles.y, 0);
}
if (this.transform.position.y != 0){
    this.transform.position = new Vector3(this.transform.position.x, 0, this.transform.position.z);
} 

此外,为了使游戏看的更清楚,增加了镜头随鼠标移动的部分。鼠标滑轮控制镜头放大缩小,左键拖动控制镜头移动。
原本还加上了右键控制镜头旋转,但实际体验效果并不好,很容易操作不当,因此并没保留镜头旋转。(也可能是我单机打的太少操作太差)

using UnityEngine;
using System.Collections;
public class MoveCamera : MonoBehaviour {

    public int cameraMoveSpeed = 10;//相机移动速度
    float originalPositionX;
    float originalPositionY;
    void Start()
    {
        originalPositionX = this.transform.position.x;
        originalPositionY = this.transform.position.y;
    }
    void OnGUI()
        {
        //鼠标左键调节镜头位置
        if (Event.current.type == EventType.MouseDrag) {
            float x;
            float y;
            x = Input.GetAxis ("Mouse X");
            y = Input.GetAxis ("Mouse Y");
            transform.Translate (new Vector3 (-x, 0, 0) * Time.deltaTime * cameraMoveSpeed);
            transform.Translate (new Vector3 (0, -y, 0) * Time.deltaTime * cameraMoveSpeed);
        }
    }

    void Update()  
    {  
         //鼠标滑轮控制放大缩小
        if( Input.GetAxis("Mouse ScrollWheel") != 0 )
        {
            this.gameObject.transform.Translate(new Vector3(0,0,Input.GetAxis("Mouse ScrollWheel")*Time.deltaTime*500));
        }
    }  
}  

为了装饰游戏,我找了带有雪的栅栏、雪地的贴图和飘雪花的效果,加上了天空盒,放置了几个雪人作为障碍物用来跟巡逻兵斗智斗勇;飘落雪花的动画也很有雪地的感觉。
这里写图片描述

项目代码

完整代码按照往常一样放在了github里,地址走→https://github.com/moko-momo/patrol-game

展开阅读全文

没有更多推荐了,返回首页