c# - Unity2D中有相交边时让角色在画布之间穿梭
问题描述
我正在创建一个视频游戏,其中角色必须在文字艺术画布(用于绘画的画布)中旅行才能达到最终目标。
请注意,我所指的“画布”不是 UI 元素,而是您在现实生活中看到的实际画布。
我的代码基于门户的概念。这可能不是处理它的最有效方法,我会考虑所有建议。
这是我当前的代码:
public Transform PortalB;
public CharacterController2D Player;
public GameObject PlayerObject;
private GameObject CloneTemporary;
public Queue<GameObject> Clones = new Queue<GameObject>();
private bool isCreated = false;
// Use this for initialization
void Start () {
Clones.Enqueue(PlayerObject);
}
// Update is called once per frame
void Update () {
// Portal adapts to the player's current position
if (Player == null) {
Player = GameObject.FindWithTag("Player").GetComponent<CharacterController2D>();
PlayerObject = GameObject.FindWithTag("Player");
}
}
void OnTriggerEnter2D (Collider2D other) {
if (other.gameObject.tag == "Player") {
if (Vector2.Distance(transform.position, other.transform.position) > 0.7f) {
if (!isCreated) {
CloneTemporary = Instantiate(PlayerObject, new Vector2 (PortalB.position.x, PortalB.position.y), Quaternion.identity) as GameObject;
Clones.Enqueue(CloneTemporary);
isCreated = true;
}
}
}
}
void OnTriggerExit2D (Collider2D other) {
if (Vector2.Distance(transform.position, other.transform.position) > 0.7f) {
print(Clones.Count);
if (Clones.Count > 1) {
UnityEngine.Object.Destroy(Clones.Dequeue());
}
}
isCreated = false;
}
“原始角色”将与门户的盒子碰撞器发生碰撞,并在门户的另一端创建一个副本。在下面的第一张图片中,box collider 用红色标注。请注意,尺寸完全相同。
请注意,从技术上讲,它不是一个门户,但由于它是一个将角色从一个地方带到另一个地方的盒子,我不妨称之为门户。
一旦原件离开盒子对撞机,它将被删除,然后克隆将成为“原件”。
我正在使用队列系统来确定首先删除哪个“克隆”。
这样做有几个问题:
解决方案
推荐阅读
- c# - 如何使用类型变量使用 Dapper 进行查询
- netlogo - 对链接、self 和 end2 语法的困惑
- javascript - 有没有办法限制使用 sequelize select 查询返回的小数位数?
- java - 哪个更好地使用带有单例对象的函数或带有类的静态函数
- mysql - Mysql Kubernetes Deployment helm chart 失败,准备就绪,liveness probe failed
- wordpress - 在 Wordpress 循环中显示帖子的类别
- database - 如何将数据模型转换为全新的数据模型?
- python - 根据行中的轴计算斜率
- c# - 在 Serenity .NET 5 中访问静态 ISqlConnections
- vba - 每 15 分钟复制一行