2016-09-11 6 views
-1

トリガーを使用してスクリプトをアクティブにしようとしています。私は、オブジェクトを浮動小数点にするスクリプトを持っていますが、プレイヤーがオブジェクトに近づくと、そのスクリプトを開始したいと思います。現時点では、オブジェクトはゲームが開始されたときに浮動し、プレイヤーがトリガーを起動したときは浮動しません。ここでトリガーでスクリプトを1つに起動する方法

は浮動スクリプトです:

public class AutoMoveAndRotate : MonoBehaviour 
{ 
    public Vector3andSpace moveUnitsPerSecond; 
    public Vector3andSpace rotateDegreesPerSecond; 
    public bool ignoreTimescale; 
    private float m_LastRealTime; 


    private void Start() 
    { 
     m_LastRealTime = Time.realtimeSinceStartup; 
    } 


    // Update is called once per frame 
    private void Update() 
    { 
     float deltaTime = Time.deltaTime; 
     if (ignoreTimescale) 
     { 
      deltaTime = (Time.realtimeSinceStartup - m_LastRealTime); 
      m_LastRealTime = Time.realtimeSinceStartup; 
     } 
     transform.Translate(moveUnitsPerSecond.value*deltaTime, moveUnitsPerSecond.space); 
     transform.Rotate(rotateDegreesPerSecond.value*deltaTime, moveUnitsPerSecond.space); 
    } 


    [Serializable] 
    public class Vector3andSpace 
    { 
     public Vector3 value; 
     public Space space = Space.Self; 
    } 
} 
} 

そして、ここでは(浮動オブジェクトの前に置かれた物体に取り付けられている)トリガスクリプトです:

public class ActivateTrigger : MonoBehaviour 
{ 
    // A multi-purpose script which causes an action to occur when 
    // a trigger collider is entered. 
    public enum Mode 
    { 
     Trigger = 0, // Just broadcast the action on to the target 
     Replace = 1, // replace target with source 
     Activate = 2, // Activate the target GameObject 
     Enable = 3,  // Enable a component 
     Animate = 4, // Start animation on target 
     Deactivate = 5 // Decativate target GameObject 
    } 

    public Mode action = Mode.Activate;   // The action to accomplish 
    public Object target;      // The game object to affect. If none, the trigger work on this game object 
    public GameObject source; 
    public int triggerCount = 1; 
    public bool repeatTrigger = false; 


    private void DoActivateTrigger() 
    { 
     triggerCount--; 

     if (triggerCount == 0 || repeatTrigger) 
     { 
      Object currentTarget = target ?? gameObject; 
      Behaviour targetBehaviour = currentTarget as Behaviour; 
      GameObject targetGameObject = currentTarget as GameObject; 
      if (targetBehaviour != null) 
      { 
       targetGameObject = targetBehaviour.gameObject; 
      } 

      switch (action) 
      { 
       case Mode.Trigger: 
        if (targetGameObject != null) 
        { 
         targetGameObject.BroadcastMessage("DoActivateTrigger"); 
        } 
        break; 
       case Mode.Replace: 
        if (source != null) 
        { 
         if (targetGameObject != null) 
         { 
          Instantiate(source, targetGameObject.transform.position, 
             targetGameObject.transform.rotation); 
          DestroyObject(targetGameObject); 
         } 
        } 
        break; 
       case Mode.Activate: 
        if (targetGameObject != null) 
        { 
         targetGameObject.SetActive(true); 
        } 
        break; 
       case Mode.Enable: 
        if (targetBehaviour != null) 
        { 
         targetBehaviour.enabled = true; 
        } 
        break; 
       case Mode.Animate: 
        if (targetGameObject != null) 
        { 
         targetGameObject.GetComponent<Animation>().Play(); 
        } 
        break; 
       case Mode.Deactivate: 
        if (targetGameObject != null) 
        { 
         targetGameObject.SetActive(false); 
        } 
        break; 
      } 
     } 
    } 


    private void OnTriggerEnter(Collider other) 
    { 
     DoActivateTrigger(); 
    } 
} 
} 

私は浮動スクリプトを追加した場合プレイヤーがトリガーを通過したかどうかにかかわらず、オブジェクトはフローティングになります。このようにするにはどうすればいいですか?

助けてください?

多くのおかげ

答えて

0

浮動オブジェクト上AutoMoveAndRotateコンポーネントを使用すると、ゲームを開始する前にdeactivedする必要があります。さもなければゲームが始まると実行されます。

+0

もちろん!なぜ私はそれを考えなかったのですか? :-)ありがとう! – Newbie

+0

これはよくある間違いです。 ;) – zwcloud

関連する問題