Очень странный вопрос, я даже не знаю, почему и как это произошло, но у меня есть 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);
}
}
Вы уверены, что у какого-либо объекта нет установленного флажка триггера? – Shannon
Вы прикрепляли к ним жесткое тело? Как насчет сетчатого коллайдера? – VicM
У вас есть OnTriggerEnter в одном из скриптов, поэтому я предполагаю, что один из них является триггером, а другой - нет. Если это не вызывает вашу проблему, возможно, два объекта находятся на разных уровнях? –