У меня очень надоедливый баг, и я не могу от него избавиться. Ситуация такова, что у меня есть родительский объект со следующим прикрепленным скриптом и триггерный коллайдер box2d. У него есть дочерний элемент с жестким телом2d (кинематика, сила тяжести = 0, положение фиксации x и вращение z), средство визуализации спрайтов и коллайдер многоугольников (с 4 краями). Моя проблема в том, что когда сцена загружена, иногда мои дочерние объекты (всегда произвольно, сколько из них и какие) перескакивают на transform.position 0,0,0.
Связываю скрипт, который прикреплен к родительскому
using UnityEngine;
using System.Collections;
public class FallingSpikeHazard : MonoBehaviour
{
public GameObject spike;
private Rigidbody2D spikeRigidbody;
[SerializeField]
private Vector3 startPosition;
void Awake ()
{
startPosition = spike.transform.localPosition;
}
void Start ()
{
spikeRigidbody = spike.GetComponent<Rigidbody2D> ();
Helper.JustReset += ResetMe;
Invoke ("CheckPosition", Time.deltaTime);
}
void CheckPosition ()
{
if (spike.transform.localPosition != startPosition) {
Debug.LogError ("t1" + spike.transform.localPosition);
spike.transform.localPosition = startPosition;
Debug.LogError ("t2" + spike.transform.localPosition);
}
}
void OnDestroy ()
{
Helper.JustReset -= ResetMe;
}
void ResetMe ()
{
spikeRigidbody.gravityScale = 0;
spikeRigidbody.isKinematic = true;
if (startPosition != Vector3.zero) {
spike.transform.localPosition = startPosition;
}
}
void OnTriggerEnter2D (Collider2D other)
{
if (other.gameObject.tag.Equals ("Player")) {
spikeRigidbody.isKinematic = false;
spikeRigidbody.gravityScale = 1;
}
}
}
События не вызываются, с другой стороны, если я отключу скрипт, это будет продолжаться. Ничто не имеет отношения к этим GameObject. У меня нет анимации или аниматора.
Что могло вызвать мою проблему?
public Rigidbody2d myRigidB; public float fixedX; void FixedUpdate(){ Vector2 myVeloc = myRigidB.velocity; myVeloc = new Vector2(0,myVeloc.y); myRigidB.velocity=myVeloc; transform.position=new vector2(fixedX,transform.position.y); }
Этот скрипт не тестировался, но решение примерно такое :) - person BazsBazs   schedule 03.07.2015