2014-04-01 8 views
1

이것은 나를 미치게 만들었고 나는 몇 시간 동안 운이 없었습니다.Unity3D 다른 스크립트 내부에서 스크립트 실행하기

내가 원하는 것은 다른 스크립트에서 내 스크립트 중 하나를 실행하는 것입니다.

두 스크립트가 모두 동일한 게임 개체에 연결되어 있습니다. 다음은 다른 스크립트를 실행하는 데 사용하려는 스크립트입니다.

using UnityEngine; 
using System.Collections; 

public class RedTeam : MonoBehaviour { 

public Wander wanderScript; 

void Awake(){ 
    wanderScript = GetComponent<Wander>(); 
} 

void Update(){ 
    wanderScript(); 
} 
} 

여기

using UnityEngine; 
using System.Collections; 
[RequireComponent(typeof(CharacterController))] 

public class Wander : MonoBehaviour 
{ 
public float speed = 5; 
public float changeDirectionTime = 1; 
public float maxDegreesToChange = 30; 

CharacterController controller; 
float heading; 
Vector3 targetRotation; 

void Awake() 
{ 
    controller = GetComponent<CharacterController>(); 

    // Set random rotation 
    heading = Random.Range(0, 360); 
    transform.eulerAngles = new Vector3(0, heading, 0); 

    StartCoroutine(NewHeading()); 
} 

void Update() 
{ 
    transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, targetRotation, Time.deltaTime * changeDirectionTime); 
    var forward = transform.TransformDirection(Vector3.forward); 
    controller.SimpleMove(forward * speed); 
} 

IEnumerator NewHeading() 
{ 
    while (true) { 
     NewHeadingRoutine(); 
     yield return new WaitForSeconds(changeDirectionTime); 
    } 
} 

void NewHeadingRoutine() 
{ 
    var floor = Mathf.Clamp(heading - maxDegreesToChange, 0, 360); 
    var ceil = Mathf.Clamp(heading + maxDegreesToChange, 0, 360); 
    heading = Random.Range(floor, ceil); 
    targetRotation = new Vector3(0, heading, 0); 
} 
} 

내가 점점 오전 오류입니다 ... 내 방황 스크립트입니다.

오류 CS1955 : 멤버 'RedTeam.wanderScript은'

내 주요 목표는 활성화하고 내 TeamRed 스크립트에서 방황 스크립트를 비활성화 할 수 있습니다 방법으로 사용하거나 위임 할 수 없습니다. GetComponent 만하기 때문에 작동합니다 : 사용하려는 경우

+1

클래스는 객체이며 메서드는 해당 객체입니다. 당신이 '나는 집에 갈거야!'라고 말하지 않는 것처럼, 방황의 개념을 불러 낼 수는 없습니다. C# 튜토리얼을 수행해야 할 수도 있습니다. – Magus

+0

"모든 것을 불러"싶다는 것은 무엇을 의미합니까? 같은'GameObject'에'Wander' 스크립트/컴포넌트의 새로운 인스턴스/복사본을 추가하고 싶습니까? 편집 : Unity가 작동하는 방식으로 첨부 된'Wander' 스크립트 _automatically_에서'Update' 메소드를 실행합니다; 당신은 수동으로 호출해서는 안됩니다 (틀림없이). –

+0

Wander가 활성화 (활성화)되면 _whole thing_을 수행합니다. 깨우기, 업데이트, 시작 모두 자동으로 호출됩니다. – Kay

답변

2

/... 당신의 RedTeamScript에서 다음을 수행하십시오 RedTeamScript에서

wanderScript = GetComponent<Wander>(); 
wanderScript.enabled = false; 

또는

wanderScript = GetComponent<Wander>(); 
wanderScript.enabled = true; 

주를 방황 스크립트를 비활성화 Wander 스크립트는 동일한 gameObject에 있습니다. 방황 스크립트가 다른 gameObject에 있으면 먼저 해당 gameObject에 대한 참조를 가져 와서 GetComponent를 호출해야합니다.

또한 GetComponent 한 번만이라고 귀하의 시작 방법

wanderScript = GetComponent<Wander>(); 

를 선언하는 것이 더 효율적입니다.