2014-02-16 8 views
0

Очень странный вопрос, я даже не знаю, почему и как это произошло, но у меня есть 2 игровых объекта, которые действительно сталкиваются, потому что у меня есть событие, когда это произойдет (взрыв) но объекты больше не нажимают друг на друга. Внезапно они не могут остановить друг друга, когда они ударяют друг друга. Мне жаль, если это звучит странно, я почти даже не знаю, как описать мою проблему. Я отправлю код, не уверен, что это будет иметь какое-то значение, но, пожалуйста, спросите меня все, что вы могли бы «о, я думаю, это может быть почему, какова ваша настройка для ...» и т. Д. Они использовали, чтобы ударить друг друга, но теперь они просто проходят, как будто они не имеют значения, НО они сталкиваются, потому что это вызывает взрыв. (он не уничтожает его, так что нет, это не потому, что игровой объект уничтожен).Мои игровые объекты не сталкиваются друг с другом

AIScript

using UnityEngine; 
using System.Collections; 

public class AIScript : MonoBehaviour { 
private PlayerScript GO; 
public Transform target; 
public Transform myTransform2; 
public GameObject Comp; 
public GameObject splosion; 
public int maxDistance; 
public int rotationSpeed; 
public int moveSpeed; 


// Use this for initialization 
void Start() { 
    GO = GameObject.Find("Player").GetComponent<PlayerScript>(); 

    target = GO.transform; 
    maxDistance = 2; 
} 

void Awake() { 
    myTransform2 = transform; 
} 

// Update is called once per frame 
void Update() { 
    if (GO.colorRed) 
    { 
     Debug.DrawLine (target.position, myTransform2.position, Color.red); 
    } 
    else 
    { 
     Debug.DrawLine (target.position, myTransform2.position, Color.blue); 
    } 

    //handles rotation of AI 
    myTransform2.rotation = Quaternion.Slerp (myTransform2.rotation, Quaternion.LookRotation(target.position - myTransform2.position), rotationSpeed * Time.deltaTime); 

    if(Vector3.Distance(target.position, myTransform2.position) > maxDistance && GO.stopAI) 
    { 
     //Move towards target 
     myTransform2.position += myTransform2.forward * moveSpeed * Time.deltaTime; 
    } 

} 

void OnTriggerEnter(Collider other) 
{ 
    if (other.transform.tag == "Player") 
    { 
     Instantiate (splosion, transform.position, transform.rotation); 
    } 
} 

} 

PlayerScript

public class PlayerScript : MonoBehaviour { 

// globals 
private AIScript GO; 
public string moveL; 
public string moveR; 
public string moveU; 
public string moveD; 
// 
public float playerSpeed; 
// 
public bool colorRed; 
public bool stopAI; 
// 
public GameObject splosion; 
// Use this for initialization 
void Start() { 
    GO = GameObject.Find("Computer").GetComponent<AIScript>(); 
} 

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

    stopAI = false; 

    if(Input.GetKey (moveL)) 
    { 
     colorRed = true; 
     stopAI = true; 
     GO.Comp.renderer.material.color = Color.green; 
     SetTransformX((transform.position.x) - playerSpeed); 
    } 
    if(Input.GetKey (moveR)) 
    { 
     colorRed = true; 
     stopAI = true; 
     GO.Comp.renderer.material.color = Color.red; 
     SetTransformX((transform.position.x) + playerSpeed); 
    } 

    if(Input.GetKey (moveU)) 
    { 
     colorRed = false; 
     stopAI = true; 
     GO.Comp.renderer.material.color = Color.blue; 
     SetTransformY((transform.position.y) + playerSpeed); 
    } 
    if(Input.GetKey (moveD)) 
    { 
     colorRed = false; 
     stopAI = true; 
     GO.Comp.renderer.material.color = Color.clear; 
     SetTransformY((transform.position.y) - playerSpeed); 
    } 

    else 
    { 
     rigidbody.angularVelocity = Vector3.zero; 
    } 
} 

void SetTransformX(float n) 
{ 
    transform.position = new Vector3(n, transform.position.y, transform.position.z); 
} 

void SetTransformY(float n) 
{ 
    transform.position = new Vector3(transform.position.x, n, transform.position.z); 
} 

}

+2

Вы уверены, что у какого-либо объекта нет установленного флажка триггера? – Shannon

+1

Вы прикрепляли к ним жесткое тело? Как насчет сетчатого коллайдера? – VicM

+0

У вас есть OnTriggerEnter в одном из скриптов, поэтому я предполагаю, что один из них является триггером, а другой - нет. Если это не вызывает вашу проблему, возможно, два объекта находятся на разных уровнях? –

ответ

1

Необходимо, чтобы изменить OnTriggerEnter к OnCollisionEnter, а затем изменить коллайдер, в результате столкновения.

Смежные вопросы