【问题标题】:How can I make a variable (preferably boolean) that can determine whether or not a function is running?如何创建一个可以确定函数是否正在运行的变量(最好是布尔值)?
【发布时间】:2015-02-08 15:39:22
【问题描述】:

上下文

我正在制作一个统一游戏,我需要测试我的玩家是否在地面上,对于任何熟悉“OnCollisionEnter”之类的东西的人来说,他们无法使用制作游戏功能的方式,但是,“OnControllerColliderHit”有效,但没有否定/退出。

我想要做的是在函数运行时有一个等于 true 的布尔值,一旦函数停​​止被调用(玩家不在地上),这个布尔值就会变为 false。

如果您需要任何其他信息,或者(如果您有统一的知识)找到关于“OnCollisionEnter”的不同解决方案,请随时询问。

谢谢!

【问题讨论】:

  • 你可以只使用一个重叠的球体来检查地面吗? Physics.overlapsphere 我认为是

标签: unity3d boolean unityscript


【解决方案1】:

如果您的问题是检查角色是否在地面上,您可以从您的角色到地面创建一个raycast,我们会为不平整添加一个边距 平台,您应该更改此值并找到最适合您的平台 地面

float distanceToGround;
float margin;

 void Start(){
   // get the distance to ground
   distanceToGround = collider.bounds.extents.y;
 }

  boolean IsGrounded() {
   return Physics.Raycast(transform.position, -Vector3.up, distanceToGround +  margin);
 }

 void Update () {
   if (IsGrounded()){
     //DoSomething
   }
 }

如果你的角色附加了character controller 组件(因为你使用的是OnControllerColliderHit,所以它肯定是附加的)你可以像这样简单地检查接地

    void Start(){
         CharacterController controller = GetComponent<CharacterController>();
      }

 void Update() {       
        if (controller.isGrounded)
            //DoSomething      
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2021-11-03
    • 2020-01-18
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多