Unity 2d 物理模拟物体碰撞入射与反射

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

public class PlayerControl : MonoBehaviour
{

private Rigidbody2D rigidbody2D;
private Vector2 m_preVelocity = new Vector2(4, 0);
// Use this for initialization
void Start()
{
    rigidbody2D = transform.GetComponent<Rigidbody2D>();

}

// Update is called once per frame
void Update()
{

}
private void OnMouseDown()
{
    rigidbody2D.AddForce(new Vector2(1, 0) * 200);
}

public void OnCollisionEnter2D(Collision2D other)
{
    ContactPoint2D contactPoint = other.contacts[0];//获取接触点
    Vector2 newDir = Vector2.zero;
    Vector2 curDir = transform.TransformDirection(Vector2.right);
    newDir = Vector2.Reflect(curDir, contactPoint.normal);//计算反射角
    Quaternion rotation = Quaternion.FromToRotation(Vector2.right, newDir);
    transform.rotation = rotation;
    rigidbody2D.velocity = newDir.normalized * m_preVelocity.x / m_preVelocity.normalized.x;
}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容