最终效果:
墙壁设置:墙壁的forward轴朝里,设置“Wall"标签
小球设置:勾选trigger,锁刚体y轴位移,设置”Ball"标签
代码:
using UnityEngine;
public class Test : MonoBehaviour
{
[Header("移动速度")]
public float moveSpeed;
private Rigidbody rb;
private void Start()
{
rb = GetComponent<Rigidbody>();
//启动施加随机方向的力
Vector3 randomDir = new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f));
rb.velocity = randomDir * moveSpeed;
}
private Vector3 reflectVec;
private void OnTriggerEnter(Collider col)
{
//碰到墙壁
if (col.gameObject.tag == "Wall")
{
//求反射向量
reflectVec = col.transform.forward;
reflectVec = Vector3.Reflect(rb.velocity, reflectVec);
reflectVec.y = 0;
rb.velocity = reflectVec.normalized*moveSpeed;
}
//碰到球
if (col.gameObject.tag == "Ball")
{
//求相对位置向量
reflectVec = transform.position - col.transform.position;
reflectVec.y = 0;
rb.velocity = reflectVec.normalized * moveSpeed;
col.GetComponent<Rigidbody>().velocity = -reflectVec.normalized * moveSpeed;
}
}
}