繁体   English   中英

Unity强制物理引擎检查碰撞

[英]Unity forcing physics engine to check collisions

我正在统一创建一个游戏,玩家可以将一个对象(一张卡片)拖到另一个对象(一个敌人)上。 如果他们将卡片拖到敌人身上,我想运行一些代码,如果不是,我想将卡片返回到其初始位置。 我在两个对象上都放置了一个对撞机,但它没有按应有的方式工作。 我假设这是因为对象在物理引擎看到碰撞之前被移回其初始位置,但我不知道如何解决这个问题。 我在移动卡片时停用了卡片上的对撞机,以避免它触发碰撞,直到玩家使用 onmousedown 和 onmouseup 事件放置它。 有关如何解决此行为的任何提示? 我可以强制物理引擎检查与 onmouseup 事件的碰撞吗? 我知道碰撞正在起作用,因为当我关闭返回初始位置行为时,游戏会按预期运行。

如何使用对撞机作为触发器而不使用刚体或任何东西。 然后,如果有触发器输入事件,则将 bool 设置为 true。 如果有触发器退出,则将布尔值重置为 false。

现在,如果您“释放”卡片,请检查 bool 是真还是假。

  • true:将卡片位置设置为玩家或您想要的
  • false:将卡片位置重置为开始

现在有点喜欢你可以在 bool 激活时在卡片周围设置一个发光的边框(只需签入更新)

例子:

public class Card : MonoBehaviour {
    private bool isHolding;
    private bool isHovering;

    public Vector3 startPos;

    public void Start() {
        startPos = transform.position;
    }
    
    public void Update() {
        // Code where you check if the card is Clicked and Moved by the player
        // If so set isHolding = true
        
        // dont enter the check if holding blablabla when animation stuff is happening
        if (doAnimationStuff) {
            // do animation
            // Destroy Object
            return;
        }
        
        // Code to check if isHolding == false
        if (!isHolding) {
            if (!isHovering) {
                transform.position = startPos;
            } else {
                doAnimationStuff = true;
            }
        }
    }

    private void OnTriggerEnter(Collider other) {
        // Check if other is a player
        // if so set isHovering = true
    }

    private void OnTriggerExit(Collider other) {
        // Check if other is a player
        // if so set isHovering = false
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM