Когда задаю новое положение объекта с коллайдером (transform.position=new Vector3(0f, 0f, 50f)) - коллайдер прибывает в эту точку через некоторый промежуток времени, так что если проверять с помошью Physics.Raycast - его еще нет на объекте. Вот пример:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class TestCollider : MonoBehaviour {
GameObject go;
string text="";
void Start () {
go=new GameObject("TestCollider");
BoxCollider coliider=go.AddComponent<BoxCollider>();
go.transform.position=new Vector3(0f, 50f, 0f);
}
void OnGUI () {
if(GUILayout.Button("try")) {
StartCoroutine(testPhisics());
}
if(GUILayout.Button("back")) {
testBack();
}
GUILayout.Label(text);
}
private IEnumerator testPhisics() {
go.transform.position=new Vector3(0f, 0f, 50f);
RaycastHit hit;
int count=0;
while(!Physics.Raycast(Vector3.zero, Vector3.forward, out hit, 100f) && (count<100)) {
count++;
yield return new WaitForSeconds(0.000001f);
}
text="Raycast is not find Collider "+count+" times";
print(text);
}
private void testBack() {
go.transform.position=new Vector3(0f, 50f, 0f);
}
}
using System.Collections;
public class TestCollider : MonoBehaviour {
GameObject go;
string text="";
void Start () {
go=new GameObject("TestCollider");
BoxCollider coliider=go.AddComponent<BoxCollider>();
go.transform.position=new Vector3(0f, 50f, 0f);
}
void OnGUI () {
if(GUILayout.Button("try")) {
StartCoroutine(testPhisics());
}
if(GUILayout.Button("back")) {
testBack();
}
GUILayout.Label(text);
}
private IEnumerator testPhisics() {
go.transform.position=new Vector3(0f, 0f, 50f);
RaycastHit hit;
int count=0;
while(!Physics.Raycast(Vector3.zero, Vector3.forward, out hit, 100f) && (count<100)) {
count++;
yield return new WaitForSeconds(0.000001f);
}
text="Raycast is not find Collider "+count+" times";
print(text);
}
private void testBack() {
go.transform.position=new Vector3(0f, 50f, 0f);
}
}
можно ли как-то заставить физику пересчитать позиции коллайдеров в заданном месте скрипта??