2017-12-24 1 views
1

나를 반 가공하는 코드를 작성했습니다. 모든 것은 작동하는 애니메이션과는 별도로 작동합니다.콜리더에서 애니메이터를 입력하십시오 (Unity3d/C#)

내가하려는 것은 플레이어가 방아쇠를 당겼을 때 그 또는 그녀가 E를 누르면 애니메이션을 수행한다는 것입니다. (애니메이션 괜찮아요 btw, 그래서 그냥 코드 오류 일하고있다?).

는 여기에 지금까지 가지고있는 작업은 다음과 같습니다

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class barTrigger : MonoBehaviour { 

    // press shit to drink text 
    public GameObject drinkText; 

    // bottle 
    public GameObject alcBottle; 

    // drink animator 
    public GameObject animatorOjbect; 
    Animator drinkAmin; 

    public bool triggerIsOn; 

    // Use this for initialization 
    void Start() { 

     drinkAmin = animatorOjbect.GetComponent<Animator>(); 

     drinkText.SetActive(false); 
     alcBottle.SetActive(false); 

    } 

    // Update is called once per frame 
    void Update() { 

    } 

    void OnTriggerEnter(Collider other){ 

     triggerIsOn = true; 

     if (other.gameObject.name == "vThirdPersonController") { 
      drinkText.SetActive (true); 

     } 

     if (triggerIsOn && Input.GetKeyDown (KeyCode.E)) { 

      drinkAmin.Play ("Dab"); 
      alcBottle.SetActive (true); 
     } 


    } 

    void OnTriggerExit(Collider other){ 

     if (other.gameObject.name == "vThirdPersonController") { 
      drinkText.SetActive (false); 
      alcBottle.SetActive (false); 
     } 
    } 
} 

도와주세요?

+0

'Debug.Log'를 사용하여'OnTriggerEnter'와'OnTriggerExit' 함수가 호출되도록합니다. – Programmer

+0

@Programmer duh. 이미 테스트했습니다. – papi

+0

죄송합니다. 당신을 도울 수는 없지만 GameObject drinkText에 대한 의견은 훌륭합니다. 내가 제안 할 수있는 가장 좋은 점은 OnTriggerEnter에 중단 점을 설정하고 E를 누를 때 triggerIsOn 값이 무엇인지 확인하는 것입니다. 논리를 따라 다른 곳으로 재설정되는지 확인하십시오. – Brien

답변

1

OnTriggerEnter 한 번 호출하면 E 버튼을 누르기가 어려우며 동시에 Input.GetKeyDown(KeyCode.E)을 감지 할 수 있습니다. OnTriggerStay 함수에서 E 입력을 확인하는 것이 더 적합하지만 OnTriggerStay 가끔 작동하지 않습니다. 그것이 존재한다는 것을 아는 것은 가치가 있지만.

프레임마다 다음 라는 OnTriggerExit 함수에 OnTriggerEnter 함수 truefalse로 설정하는 기능으로 이동 UpdateInput.GetKeyDown(KeyCode.E). 아래는 변경해야 할 코드입니다.

void Update() 
{ 
    if (triggerIsOn && Input.GetKeyDown(KeyCode.E)) 
    { 
     Debug.Log("E button pressed"); 
     drinkAmin.Play("Dab"); 
     alcBottle.SetActive(true); 
    } 
} 

void OnTriggerEnter(Collider other) 
{ 
    if (other.gameObject.name == "vThirdPersonController") 
    { 
     Debug.Log("Detected vThirdPersonController"); 
     triggerIsOn = true; 
     drinkText.SetActive(true); 
    } 
} 

void OnTriggerExit(Collider other) 
{ 

    if (other.gameObject.name == "vThirdPersonController") 
    { 
     Debug.Log("Lost vThirdPersonController"); 
     triggerIsOn = false; 

     drinkText.SetActive(false); 
     alcBottle.SetActive(false); 
    } 
} 

당신이 작업, 즉 더 능숙로 CompareTag 기능을 대신 gameObject.name를 사용하여 시작하는 것이 일단.

+0

아. 그것은 지금 많은 의미가 있습니다. 나는 그것이 단지 1 프레임 동안 작동했을 것이라는 것을 잊었다. 그리고 내가했던 방식을 사용하는 것은 거의 불가능하다. – papi

+0

그것은 그것이 작동하기를 원하는 방식으로 작동합니다. 나는 나머지를 구현하러 간다. 고마워, 정말 고마워. 해피 크리스마스 이브! <3 – papi

+0

문제 없습니다. 그런 식으로 일하기 위해서는 당신이 매우 빠르지 만 나는 과거에 똑같은 실수를했을 때 그런 식으로 일하는 것을 결코 얻지 못했습니다. 해피 코딩! – Programmer

관련 문제