2D Ricochet Physics不在Unity中工作

时间:2018-06-01 20:44:16

标签: c# unity3d 2d physics game-physics

我正在尝试制作一个游戏,其中一个球会在屏幕上弹出几个不同的碰撞器。根据我研究的内容,我得到了一些起初似乎有意义的代码,但似乎根本不起作用。我正在测试它只是将球落到2D地板上并附有一个盒式对撞机。然而,一旦它与地板碰撞,它就会停在那里并且不会反弹。我试过禁用"查询在碰撞器中开始"在项目设置中并偏移RaycastHit2D的原点位置,这样它就不会检测到它附着的对撞机,但仍然无法正常工作。我不认为RaycastHit2D正在工作,因为它甚至不会在控制台中显示任何内容。这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyBehavior : MonoBehaviour {
    Rigidbody2D rigidbody;
    public Vector2 startPos;
    public float speed;
    public float hitOffset;
    Vector3 vector = new Vector3(0, 5,0); //used to offset origin point of RaycastHit2D hit

    private void OnEnable()
    {
        rigidbody = GetComponent<Rigidbody2D>();
        this.transform.position = startPos;
    }

    private void Update()
    {
        transform.Translate(Vector2.down * speed * Time.deltaTime);


        RaycastHit2D hit = Physics2D.Raycast(transform.position + vector, - transform.up, speed * Time.deltaTime + hitOffset);

        Debug.DrawRay(transform.position, -transform.up, Color.red);

        Ray2D ray = new Ray2D(transform.position, -transform.up);

        if (hit)
        {
            Debug.Log(speed * Time.deltaTime + hitOffset);
            Debug.Log(hit.collider.name);
            Vector2 reflectDir = Vector2.Reflect(ray.direction,hit.normal);

            float rotation = Mathf.Atan2(reflectDir.y, reflectDir.x) * Mathf.Rad2Deg;
            transform.eulerAngles = new Vector3(0, 0, rotation);
        }

    }

}

我的数学不好吗?非常感谢任何帮助,谢谢。

0 个答案:

没有答案