2017-02-22 31 views
0
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class BoxCollider : MonoBehaviour { 

    private float degrees = 180f; 
    public float rotateSpeed = 10f; 
    private GameObject character; 
    private bool entered = false; 


    // Use this for initialization 
    void Start() 
    { 

    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (entered == true) 
     { 
      character.transform.rotation = Quaternion.Slerp(character.transform.rotation, Quaternion.Euler(degrees, 0, degrees), rotateSpeed * Time.deltaTime); 
     } 
    } 

    void OnTriggerEnter(Collider c) 
    { 
     character = c.gameObject;   
     entered = true; 
    } 
} 

角色第一次碰撞牆(空對象與箱對撞機)時,它會將輸入更改爲true並旋轉角色。如何在字符碰撞盒子時以邏輯方式使用bool變量?

但與後旋轉其他牆碰撞,達到了其他牆壁我用斷點而且越來越向部分:

void OnTriggerEnter(Collider c) 
     { 
      character = c.gameObject;   
      entered = true; 
     } 

但是當它得到的更新功能:

if (entered == true) 

我在這條線上使用了一個斷點並輸入了錯誤。 不知道爲什麼。

第一次碰撞牆是真的,但第二次碰撞牆是錯誤的。

我使用這個布爾的原因是隻有當碰撞牆(盒)時才旋轉角色。

我在地形周圍有4個空的gameobjects,每個人都有一個box collider istrigger設置爲on,並且這個腳本也附加到每個gameobject上。

我不明白爲什麼第一次輸入是真的第二次是錯誤的。

+1

確定您正在查看/調試正確的實體? (如果沒有誤導,多次使用的對象中的斷點會引起混淆。) – RuDevel

回答

1

OnTriggerEnter不工作(如果您與牆壁碰撞,是不是需要OnCollisionEnter?),或者您有一些其他腳本將entered設置爲false。因爲根據你輸入一個設置爲isTrigger entered的對撞機將發送的密碼將始終爲真。確保您沒有將腳本附加到許多對象。這也可能會導致誤導性的調試值,因爲它可能在另一個對象上是錯誤的。

另外值得一提...

注:碰撞事件只會被髮送,如果對撞機的一個也有附加的非運動剛體。

或者如果您使用的是CharacterController。如果您有任何將entered設置爲false的代碼,您應該並且必須包含該代碼才能獲得進一步的幫助。

+0

仍然無法正常工作。該腳本被附加到每個gameobject的4個空盒子對象組件添加到每個gameobject。所以腳本在每個遊戲對象中都有4個地方。 ThirdPersonController(1)我有兩個ThirdPersonController。我有這個組件:動畫師,剛體,膠囊對撞機,第三人稱用戶控制(腳本),第三人稱角色(腳本)就是這樣。在剛體中檢查使用重力(設置爲開啓)。 –

+0

每一堵牆都在旋轉玩家與玩家相撞......您確定沒有將「輸入」設置爲false的代碼? – Maakep

+0

還沒有工作。但我做了一些測試。我看到,當它與牆上檢查員的第一面牆發生碰撞後進入更新功能時,我看到輸入的複選框已勾選,所以它是真實的。然後旋轉後,它移動到第二個牆上,我看到這個牆附近輸入的複選框沒有選中false,但它仍然在第一個牆上被檢查爲真。然後它觸摸第二面牆,並且它的輸入框旁邊的複選框也被選中。所以現在進入的兩面牆都被檢查過了。但它並沒有在第二面牆上旋轉。 –