Unity制作塔防游戏(更新中...)

视频地址以及资源需要请留言

相机移动

float mouse = Input.GetAxis("Mouse ScrollWheel");   # 获取鼠标轮滑
transform.Translate(new Vector3(h * speed, mouse * mspeed, v * speed) * Time.deltaTime, Space.World);
# Space.World 相对世界坐标的移动

敌人生成

[System.Serializable]   //表面该类可序列化,可直接在Unity上显示操作

// 协成开始
void Start()
{
    StartCoroutine(EnemyGenerate());
}

// 协成生成敌人
IEnumerator EnemyGenerate()
{
    foreach (Wave wave in waves)
    {
        for (int i = 0; i < wave.count; i++)
        {
            GameObject.Instantiate(wave.enemy, MONSTER_START.position, Quaternion.identity);
            enemyCount++;
            if (i != wave.count - 1)
            {
                yield return new WaitForSeconds(wave.rate);
            }
        }
        while (enemyCount > 0)
            yield return 0;
        // 一波敌人结束后才生成另一波敌人
        yield return new WaitForSeconds(waveTime);
    }
}

创建炮塔

切换炮塔事件

![1527150238](E:\unity3d\Tower Defense\doc\1527150238.png)

  • 点击Toggle Inspector里面对应的On Value Changed,绑定改变炮塔对应调用的函数

获取鼠标点击的游戏对象

// 返回一个从相机到屏幕点的光线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// debug
Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
RaycastHit hit; // 存放碰撞物体的信息
bool isCollider;

// ray:射线对象
// layerMask:选择那个层进行碰撞检测
// hit:存放碰撞物体的信息
// maxDistance:最远距离
isCollider = Physics.Raycast(ray, out hit, 1000, LayerMask.GetMask("MapCube"));
if (isCollider)
{
    // 得到点击的mapcube
    GameObject mapCube = hit.collider.gameObject;
}

地图方块控制

  • [HideInInspector] // 不需要显示在面板

猜你喜欢

转载自blog.csdn.net/ilovexiaohao/article/details/80496537