Unity

Rigidbody Collision Stopping Issue

9월 16, 2021 Unity No comments , ,

문제 증상

Ball을 Rigidbody를 Dynamic으로 설정시 Reflect를 아래와 같은 형태로 추가

private void OnCollisionEnter2D(Collision2D collision)
{
    this.Direction = Vector2.Reflect(this.Direction, collision.contacts[0].normal);
}

private void FixedUpdate()
{
    this.RigiBody.velocity = this.Direction * this.Speed * Time.fixedDeltaTime;
}

정상적으로 Block에 부딪 혔을때 Reflect의 의해 Ball에 방향이 변경 됨.
하지만, 간혹 Ball이 Stopping 되는 증상이 발생
Debugging 결과 아래와 같이 OnCollisionStay2D()에서 반복적으로 Call되는것을 확인.
Resolution)
동일한 Block인 경우 강제로 Direction을 설정하여, 멈추는 것을 벗어나도록 수정

private void OnCollisionStay2D(Collision2D collision)
{
    Block collisionBlock = collision.gameObject.GetComponent<Block>();
    if (collisionBlock != null &amp;&amp; this.LastCollisionBlock2DInStay == collisionBlock)
    {
        Debug.Log("MyBall::OnCollisionStay2D::It's the same as last collison block.");
        this.Direction = new Vector2(1, 1);
    }
    this.LastCollisionBlock2DInStay = collisionBlock;
}

RigiBody Collision Issue

8월 29, 2021 Unity No comments

Ball 을 Block에 붇딪혀 Collision시 간혹 통과하는 문제가 발생

private void OnCollisionEnter2D(Collision2D collision)
{
   ...
    this.Direction = Vector3.Reflect(this.Direction, collision.contacts[0].normal);
}

private void FixedUpdate()
{
    //MyBall Velocity
    this.RigiBody.velocity = this.Direction * this.Speed;
}

위와 같이 한경우 간혹 Ball이 block을 통과하는 문제 발생.

아래와 같이 Dynamic으로 변경 후 문제 해결 (참고로, Kinematic은 물리 engine을 직접 구현하는 방식)

추가로 반복적으로 일시적으로 흔들리는 듯한 증상이 발생
Debugging 결과 동일한 Block의 Collision이 발생 됨. 아래 Code와 같이 동일 Instance인 경우 무시하도록 수정

private void OnCollisionEnter2D(Collision2D collision)
{
     if (this.LastCollisionInstanceId == collision.gameObject.GetInstanceID())
                    return;

     this.LastCollisionInstanceId = collision.gameObject.GetInstanceID();
}

Debug.Log

8월 14, 2021 Unity No comments , , ,

Unity에서 Log의 Color 설정

Debug.Log ("<color=green>Menu State</color> OnActive");
Debug.Log ("<color=red>Menu State</color> OnDeactivate");
Debug.Log ("<color=yellow>Menu State</color> OnUpdate");

Unity Tips

8월 14, 2021 Unity No comments , ,

Does not Touch  / Mouse Down


문제점

Unity MonoBehaior에 아래와 같이 OnMouseDown() or IPointerDownHandler를 사용 하였지만,동작 하지 않음

public class Tile : MonoBehaviour, IPointerDownHandler 
{
    void OnMouseDown() 
    { 
        Debug.Log("OnMouseUp"); 
    } 
    public void OnPointerDown(PointerEventData eventData) 
    { 
        Debug.Log(this.gameObject.name + " Was Clicked."); 
    }
}

해결책

Main Carmera의 Position.Z를 0에서 -10로 변경 후 정상 동작