首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity2D:如何测量一个平台的边界,一个游戏对象站在上面?

Unity2D:如何测量一个平台的边界,一个游戏对象站在上面?
EN

Stack Overflow用户
提问于 2022-02-26 02:10:20
回答 1查看 23关注 0票数 0

我在做一个游戏,我有一个骨架作为游戏对象:

因为这具骷髅是敌人,所以我想让它自己行走,当它到达边缘的时候,转身,以此类推。我设法让它像这样走路:

代码语言:javascript
复制
void Update() {
    if (isWalking) {
      body.velocity = new Vector2((isFacingLeft ? -1 : 1) * speed, body.velocity.y);
    .
    .
    .

为了测试目的,从一开始就将isWalking设置为truespeed是5,而isFacingLeft是一个布尔值,我想在骨架到达边缘时翻转它,最初是false,所以骨架不间断地向右移动。

因此,我的想法是使用OnCollisionEnter2D,因为骨架位于平台游戏对象的顶部,并且使用碰撞对象获得不同的界限:

从图片上看,如果游戏对象平台可以被称为L和它的宽度y,那么我正在考虑通过查找Lx和Lx +y来获得它的必要界限。然后,如果骨架的宽度可以被称为x,我想测量骨架的transform.position.x并检查:如果它面向右,transform.position.x > Lx + y - x (或者x / 2来接近它的边缘一点),然后翻转isFacingLeft布尔值。如果它面向左侧和transform.position.x < Lx + x (或x / 2),则翻转布尔值。

但是,如果我尝试记录左侧边缘(通过collider.transform.position.x)和骨架位置(通过transform.position.x),就会得到6.4596, 5.943441的起始值,这意味着骨架在平台之前就开始了。在这种情况下,是否可能transform不是检查边界的正确属性?那么,如何确保我使用所需的值来检查边呢?如果有人知道,请评论,即使你对我的方法有疑问,因为仔细的思考过程确实有助于得到一个答案。

EN

回答 1

Stack Overflow用户

发布于 2022-02-28 01:59:06

因此,就像reddit上的pocokknight建议的那样,我尝试实施射线投射,这样就有一条射线从骨架精灵的下角投射出来,这取决于它应该面对的位置,可以通过SpriteRenderer.bounds.size实现。如果光线投射没有击中任何位置,骨架将面临翻转。这使骨架能够永远来回旋转:)

代码语言:javascript
复制
RaycastHit2D hit = Physics2D.Raycast(new Vector2(transform.position.x + ((enemyWidth / 2) * direction), transform.position.y - enemyHeight / 2), transform.TransformDirection(new Vector2(1 * (direction), -1)), 1f);

当然,这是函数的一个非常简单的执行,我可能会想到光线投射检查可能失败的场景(比如如果player对象在其路径上应该检查空区域),但到目前为止,这是一个我很满意的进展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71273557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档