实现功能:
(1) 防御塔的选择
(2) 防御塔在指定位置的部署
(3) 防御塔的拆除
重难点:凝视技术,射线检测;
先实现摄像机的随鼠标转动,模拟头的摇动。
实现思路:
通过鼠标在屏幕的增量(Mouse X,Mouse Y)来改变摄像机的角度。
代码如下(涉及四元数和欧拉角)
float X = transform.localRotation.eulerAngles.x - Input.GetAxis("Mouse Y");
float Y = transform.localRotation.eulerAngles.y + Input.GetAxis("Mouse X");
Vector3 newAngles = new Vector3(X,Y, transform.localRotation.eulerAngles.z);
transform.localRotation = Quaternion.Euler(newAngles);
再来实现凝视(从摄像机中心发射一条射线,若碰撞到指定物体,出现进度圈,并开始加载进度圈)。
如下图所示:
实现思路:
利用两张图片实现进度圈;
UI->Image,贴上一个圆的图片,设置颜色为红色;
在上面的Image下再创建一个Image作为子物体,设置颜色白色,大小比红圆小一点;
设置红圆Image Type为Filled,FillAmount设置为0;
选择Canvas设置Render Mode为Screen Space-Camera,将摄像机拖到render camera上;
添加一个脚本如下:
Image loadingimage = LoadingImage.GetComponent<Image>();
Ray ray = new Ray(Head.position, Head.forward);//从摄像机位置发射一条射线
RaycastHit hitInfo;
if(Physics.Raycast(ray,out hitInfo,Mathf.Infinity))
{
print(hitInfo.transform.name);
if(hitInfo.transform.name=="tower")
{
loadingimage.gameObject.SetActive(true);
loadingimage.fillAmount += 0.01f;
}
else if(LoadingImage!=null)
{
loadingimage.gameObject.SetActive(false);
loadingimage.fillAmount = 0;
}
}
未完续待。。。。。