日志2025.1.22
1.增加了射击索敌功能
用Target脚本当做标签用,挂载到目标身上
//被锁定的目标
public Transform Target()
{
Transform target = null;
if (GetMouseHitInfo().transform.GetComponent<Target>() != null)
{
target = GetMouseHitInfo().transform;
}
return target;
}
private void UpdateAimPosition()
{
//锁定瞄准,使打出的子弹射在target上
Transform target = Target();
if (target != null && isLockingToTarget) {
if (target.GetComponent<Renderer>() != null)
{
//不瞄准物体在底部的轴心,而是通过Renderer瞄准其中心
aim.position = target.GetComponent<Renderer>().bounds.center;
}
else aim.position = target.position;
return;
}
//精确瞄准
aim.position = GetMouseHitInfo().point;
//非精确瞄准
if (!isAimingPrecisly)
aim.position = new Vector3(aim.position.x, transform.position.y + 1, aim.position.z);
}
2.增加了武器激光射线
在武器上挂载 Line Renderer 组件,把其Lighting的设置都取消。
新建一个材质作为激光,在Shader里面选择Particles/Standard Unlit,再把Rendering Mode 改为Fade.
[SerializeField] private LineRenderer aimLaser;
private void UpdateAimLaser()
{
Vector3 startPoint = player.weapon.gunPoint.position;
Vector3 laserDirection = player.weapon.BulletDirection();
float laserDistance = 4.0f;
//设置激光起点
aimLaser.SetPosition(0, startPoint);
Vector3 endPoint = startPoint + laserDirection * laserDistance;
//如果激光碰到物体,则将激光终点设置为激光与物体的交点
if(Physics.Raycast(startPoint, laserDirection,out RaycastHit hitinfo, laserDistance))
{
endPoint = hitinfo.point;
}
//设置激光终点
aimLaser.SetPosition(1, endPoint);
}
3.认识了Mesh Collider 和 其中的 Convex
4.知道了如何将轴心变为中心