作者 | 珞珈大胖强TURBO

来源 | CSDN博客,责编 | 夕颜

封面图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

首先,假设传送门是两两之间可以传送,那么具体是实现,重要的点有以下四点:

  1. 传送门检测人物进入

  2. 传送门得到目的传送门(也就是和当前传送门相同种类的门)的GameObject

  3. 传送门代码控制人物的位置到目的传送门

  4. 暂时关闭目的传送门的传送功能,当人物走出去之后再重新开启传送功能

接下来逐个攻破:

传送门检测人物进入

此图中的圆圈为传送门,给他加C#脚本,命名为PortalGateway

1private void OnTriggerEnter2D(Collider2D collision)
2    {
3        if ( collision.gameObject.layer == 8)
4    }

其实这两行代码就解决问题了,也就是在OnTriggerEnter2D检测碰撞体的图层是不是人物图层,这里是8的原因是因为我的项目的人物图层是8.

获得目的传送门的 GameObject

传送门得到目的传送门(也就是和当前传送门相同种类的门)的GameObject。

1 public enum KindofGate
2    {
3        Gate1,
4        Gate2,
5        Gate3,
6        Gate4
7    }
8
9    public KindofGate kindofGate;

这些代码,设置传送门种类枚举,创建枚举对象kindofGate,自己设置想要互相传送的传送门kindofGate相同

那么,一个传送门怎么找到相同种类的传送门呢?

1. 在GameManager中加入注册方法,统计注册所以的PortalGateway为一个List。

 1 List<PortalGateway> portalGateways;2 portalGateways = new List<PortalGateway>();3 public static void RegistPortalGateway(PortalGateway portalGateway)4    {5        if (!instance.portalGateways.Contains(portalGateway))6            instance.portalGateways.Add(portalGateway);7    }8``

2. 每个传送门的代码的Start部分调用,将自身注册(也就是加入进List)。

1```c
2  GameManager.RegistPortalGateway(this);

3. 在GameManager中加入寻找方法,参数为PortalGateway对象,遍历List,寻找和该对象的kindofGate相同的对象。

 1  public static  PortalGateway FindSameGate(PortalGateway portalGateway)2    {34            foreach(PortalGateway portalGateway1 in instance.portalGateways)5            {6                if(portalGateway1!=portalGateway)7                {8                if (portalGateway1.kindofGate == portalGateway.kindofGate)9                    return portalGateway1;
10                }
11            }
12        return null;
13    }

4. 在PortalGateway中调用方法,寻找到相同种类的传送门

1GameManager.FindSameGate(this)

(Gamemanage就是个一个场景自始至终只有一次生成的代码,不会因为关卡重启而删除),具体实现可以学习单例模式,代码就是这种

 1 private void Awake()2    {34        if (instance != null)5        {6            Destroy(gameObject);7            return;8        }9
10        instance = this;
11
12        DontDestroyOnLoad(this);
13    }

传送门代码控制人物的位置到目的传送门

有了上面的东西,现在就简单了

1  collision.transform.position = GameManager.FindSameGate(this).transform.position;

重新开启传送功能

暂时关闭目的传送门的传送功能,当人物走出去之后再重新开启传送功能。

设置一个bool状态,控制传送功能:

 1  public bool CanCheckAnother;2  //进3  private void OnTriggerEnter2D(Collider2D collision)4    {5        if ( collision.gameObject.layer == 8)6        {78            if (CanCheckAnother == true)9            {
10
11                if (GameManager.FindSameGate(this).CanCheckAnother == true)
12                {
13                    collision.transform.position = GameManager.FindSameGate(this).transform.position;
14                    CanCheckAnother = false;
15                }
16            }
17
18        }
19        }
20      //出
21    private void OnTriggerExit2D(Collider2D collision)
22    {
23        if (collision.gameObject.layer == 8 )
24            GameManager.FindSameGate(this).CanCheckAnother = true;
25    }

总代码如下:

 1using System.Collections;2using System.Collections.Generic;3using UnityEngine;45public class PortalGateway : MonoBehaviour6{7    public enum KindofGate8    {9        Gate1,
10        Gate2,
11        Gate3,
12        Gate4
13    }
14
15    public KindofGate kindofGate;
16    public bool CanCheckAnother;
17
18    private void Start()
19    {
20
21        CanCheckAnother = true;
22
23        GameManager.RegistPortalGateway(this);
24
25    }
26
27    private void OnTriggerEnter2D(Collider2D collision)
28    {
29        if ( collision.gameObject.layer == 8)
30        {
31
32            if (CanCheckAnother == true)
33            {
34
35                if (GameManager.FindSameGate(this).CanCheckAnother == true)
36                {
37                    collision.transform.position = GameManager.FindSameGate(this).transform.position;
38                    CanCheckAnother = false;
39                }
40            }
41
42        }
43
44
45
46
47    }
48
49
50    private void OnTriggerExit2D(Collider2D collision)
51    {
52        if (collision.gameObject.layer == 8 )
53            GameManager.FindSameGate(this).CanCheckAnother = true;
54    }
55
56}

原文链接:

https://blog.csdn.net/weixin_44739495/article/details/104742250

推荐阅读 

☞李彦宏:百度今年全员涨薪,比去年还多;谷歌暂停Chrome浏览器更新;Eclipse 4.15发布 | 极客头条

☞GitHub 移动端正式发布!

☞检测、量化、追踪新冠病毒,基于深度学习的自动CT图像分析有多靠谱?

☞深度学习“三巨头”、图灵奖得主 Yann LeCun:我没有天赋,所以才追随聪明人

☞Docker 开发环境的滑坡

☞来,让我们逐一澄清以太坊 2.0 五大误解

你点的每一个在看,我认真当成了喜欢

把人物用 Unity 进行 2D 传送,拢共分四步 | 原力计划相关推荐

  1. 炸薯片和AI生产新闻一样样的!拢共分六步

    作者:Echo 来源:科技树(ID:techtreex) 张小敬是被大案牍术选出来的人. 如果你正在看<长安十二时辰>,可能会知道我在说什么,没看过也没关系,我可以用一个现代版类比一下. ...

  2. 从零搭建游戏服务器,拢共分几步?

    现代的电子游戏,不管是端游还是手游,网络游戏还是单机游戏,或多或少都会需要一些网络功能.从验证正版,到登录注册,再到多人交互,实时对战,都需要服务器端的支持. 游戏服务器端,是一个长期运行的程序,还要 ...

  3. 开发一个 Chrome 浏览器插件,拢共分几步?

    市面上浏览器有很多,比如 IE.Edge.火狐.Safari 等,但市场占有率第一的永远只有一个 -- Chrome. 之所以如此,很大一部分原因是 Chrome 丰富的插件库.我们在使用浏览器时,免 ...

  4. 开发个企业级健康管理项目,拢共分几步?

    随着我国经济的快速发展,和人口老龄化的到来,老年医疗服务.护理服务.健康保险.老年旅游等需求日益增多,老年服务市场越来越大.据统计,到 2025 年中国 65 岁及以上的老年人将超过 2.1 亿,相信 ...

  5. 安装Vue浏览器插件拢共分几步(保姆文章)

    (据说vue3的插件也适用vue2) 一.打开极简插件网页 极简插件_Chrome扩展插件商店_优质crx应用下载 (zzzmh.cn)https://chrome.zzzmh.cn/index#/i ...

  6. 雪糕数据告诉你,东北网红变身魔都名媛拢共分几步

    风水轮流转,雪糕界的明星也是年年换.听说你们挑剔的舌头,今年又追捧起"中街1946"来.不过,这个号称源自张作霖后厨的冰淇淋背后,并不是又一个"东北大板"式的网 ...

  7. unity学习———2D人物的移动

    unity学习---2D人物的移动 代码如下 using System.Collections; using System.Collections.Generic; using UnityEngine ...

  8. unity中2D飞机游戏手指触屏操作的问题

    unity中2D飞机游戏手指触屏操作的问题 菜鸡记录一下在项目中遇到的坑 下面就是我用的代码 if (UnityEngine.Input.touchCount > 0) //每一帧触摸到的屏幕的 ...

  9. Unity简单2D游戏开发

    Unity简单2D游戏开发 前言: 近日比较无聊,在b站找了一个up主,跟着他的教程来做游戏--开发一个简单的2D游戏 用 Tilemap 绘制场景 新建一个2D项目,在Unity Asset Sto ...

最新文章

  1. 你应该知道的五种IO模型
  2. Android No static field XXX of type I in class Lcom/XXX/R$id错
  3. traceroute命令的用法实例
  4. Pandas入门2(DataFunctions+Maps+groupby+sort_values)
  5. java获取对象的子_java – 如何根据子对象字段获取父对象
  6. neostrack服务器无响应,捷安特GPS码表NeosTrack试用评测
  7. 包含html语言的超链接标记的网页_什么是网页
  8. c# 获取excel单元格公式结果_EXCEL公式解析:单元格中数字去重排序思路及公式详解...
  9. python中什么是异常,python中异常处理,python异常处理,什么是异常?异常是一
  10. python利用Tesseract识别验证码
  11. imx8 usb otg模式切换
  12. 变分法与最优控制matlab,1987_11变分法与最优控制_10654423.pdf
  13. 【classic】MMD镜头+动作打包下载.zip
  14. P58-前端基础HTML-表格入门介绍
  15. 写一个PE的壳_Part 4:修复对ASLR支持+lief构建新PE
  16. 【SAP】ABAP开发——ALV展示后字段的下划线连接
  17. Linux安装MariaDB10.4
  18. 511遇见易语言文本替换和子文本替换
  19. 手机mstsc远程工具_microsoft remote desktop android下载
  20. vmware虚拟机实现两台电脑远程桌面连接

热门文章

  1. 大型网站登录信息保存实现-整理
  2. 基于WPF+XMPP的IM程序开发日志 之二 WPF线程模型
  3. ASP.NET页生命周期介绍:阶段,事件及其他
  4. ajax 页面部分先显示图片后出数据
  5. 主从模式在不同场景下的解释
  6. 矩池云上缺少curand.h、cublas_v2.h、cusolverDn.h头文件解决方法
  7. linux程序内存布局,关于Linux中程序的内存布局
  8. cx_oracle写日志信息_浅谈微服务架构之构建日志收集系统
  9. leetcode python3 简单题169. Majority Element
  10. 如何让地面不起灰_地面不平能铺地板吗?木地板不平怎么修复