Unity探索地块通路设计分析 & 流程+代码具体实现

⭐️前言引入:

  • 比方说我们有下面一张地图(概念设计图)需要探索

⭐️游戏背景:

  1. 主堡位于地图最右侧中央,怪从左侧生成。
  2. 我们通过挖地块生成小路影响怪的路径,通过建造塔抵御怪的入侵。
  3. 已经挖开的路是小怪的移动范围,尚未挖开的部分地块可以放置想要的塔。
  4. 部分地块有概率获得特殊奖励/彩蛋,塔和不同的地块可设计不同的元素交互(这里不便做具体展开,大家可以自行脑补)
  5. 我们的目的是成功抵御多个波次的怪物攻击,成功守住我们的主堡。

⭐️具体功能模块说明:

  • 当前探索到的某个地块会有一个标识,如果这是一个可挖地块的话,我们点击标识,会出现2~3个小三角箭头,点击某个箭头,所指向的地块如果是可挖地块的话,就会变成通路。
  • 我们所要设计的就是实现这样的一个想法或者说是功能,并将其拓展成一个可供外部调用的通用接口

⭐️设计思路:

  • 起点没有地块覆盖,是通路,用一个小特效图片作为标识,通过点击任意朝向的箭头,可以把箭头指向的地块变为通路。
  • 这个变的过程其实就是切换一张图片,并且要将上一个地块的箭头隐藏并显示出下一个地块的箭头。
  • 这里有一个重要的点,我们要保证生成的通路是连续的,比如上一张的纹理是竖着的,下一张的要和它连贯,遇到弯路的时候,还要显示弯曲的路,这就要进行两次判断,第一次判断要和上一张连贯,第二次判断要和前后两张连贯

⭐️实现效果:

⭐️实现过程:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class chufa : MonoBehaviour
{
    public GameObject Stick, changeStick;
    public GameObject btn1, btn2;
    public GameObject btn_stick1, btn_stick2;
    public Image sr;
    public Sprite[] pic;

    void Start () { 
        sr = GetComponent<Image>();
        Button btn = Stick.GetComponentInChildren<Button>();
        btn.onClick.AddListener (OnStartButtonClick);
    }

    public void OnStartButtonClick()
    {
        Debug.Log("哈哈哈哈!看,你好像是个憨憨!!");
        changeStick.GetComponent<Image>().sprite = pic[0];

        btn_stick1.SetActiveRecursively(false);
        btn_stick2.SetActiveRecursively(false);

        btn1.SetActiveRecursively(true);
        btn2.SetActiveRecursively(true);
    }

    public void TransRoad() 
    {
        //...
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Unity打靶游戏的设计流程一般如下: 1. 创建场景:在Unity中创建一个新场景,添加一个地面和一些墙壁作为靶的背景。 2. 导入模型:导入靶和武器的3D模型,可以使用Unity自带的模型或者导入自己的模型。 3. 添加脚本:为靶、武器和子弹等要素添加脚本,编写逻辑控制代码。 4. 添加音效和特效:为射击、命中和得分等操作添加音效和特效,增加游戏的可玩性和趣味性。 5. 调试和优化:测试游戏,并对游戏进行调试和优化,以提高游戏的稳定性和性能。 以下是一个简单的Unity打靶游戏的设计代码示例,包括靶、武器、子弹、得分等要素: ```csharp using UnityEngine; using UnityEngine.UI; using System.Collections; public class ShootingGame : MonoBehaviour { public GameObject targetPrefab; // 靶的预制体 public Transform targetSpawnPoint; // 靶的生成点 public GameObject weapon; // 武器模型 public GameObject bulletPrefab; // 子弹预制体 public Transform bulletSpawnPoint; // 子弹发射点 public float bulletSpeed = 10f; // 子弹速度 public Text scoreText; // 显示分数的文本框 public int scorePerHit = 10; // 每次击中靶的得分 private int score = 0; // 当前得分 private bool gameStarted = false; // 游戏是否已经开始 void Start () { SpawnTarget (); // 生成第一个靶 } void Update () { if (Input.GetMouseButtonDown (0) && gameStarted) { // 鼠标左键按下,且游戏开始 Shoot (); // 射击 } } void SpawnTarget () { GameObject newTarget = Instantiate (targetPrefab, targetSpawnPoint.position, Quaternion.identity) as GameObject; // 生成新的靶 newTarget.GetComponent<Target> ().shootingGame = this; // 给靶设置ShootingGame脚本的引用 } void Shoot () { GameObject newBullet = Instantiate (bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation) as GameObject; // 生成新的子弹 Rigidbody rb = newBullet.GetComponent<Rigidbody> (); rb.velocity = weapon.transform.forward * bulletSpeed; // 给子弹添加速度 Destroy (newBullet, 3f); // 3秒后自动销毁子弹 } public void HitTarget () { score += scorePerHit; // 得分增加 scoreText.text = "Score: " + score.ToString (); // 更新分数文本框的显示 SpawnTarget (); // 生成新的靶 } public void StartGame () { gameStarted = true; // 标记游戏已经开始 } } ``` 其中,`Target`脚本是靶的控制脚本,用于检测是否被击中: ```csharp using UnityEngine; public class Target : MonoBehaviour { public ShootingGame shootingGame; // ShootingGame脚本的引用 void OnCollisionEnter (Collision col) { if (col.gameObject.tag == "Bullet") { // 如果被子弹击中 Destroy (gameObject); // 销毁靶 shootingGame.HitTarget (); // 通知ShootingGame脚本得分增加 } } } ``` 以上代码只是一个简单的示例,你可以根据自己的需求和技能对代码进行更复杂的设计和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米莱虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值