弹痕生成需要使用到法线,弹痕生成出来会镶嵌进地图,这个时候就需要通过法线来将弹痕往外移
if (Input.GetButtonDown(GameManagers.fire))
{
RaycastHit hit;//发射射线
if (Physics.Raycast(pos.position,pos.forward,out hit,50))//射线的起点和终点以及长度
{
GameObject holeobj=Instantiate(hole, hit.point, Quaternion.identity);//生成弹痕
holeobj.transform.LookAt(hit.point - hit.normal);//射线和法线平行
holeobj.transform.Translate(Vector3.back * 0.03f);//弹痕往外移
Destroy(holeobj, 2);//两秒后消失
}
}
第一人称移动
void Move()
{
float x = Input.GetAxis(GameManagers.horizontal);
float z = Input.GetAxis(GameManagers.vertical);//设置水平轴
if (Mathf.Abs(x) > 0 || Mathf.Abs(z) > 0)//判断是否移动
{
Vector3 dir = transform.forward * z + transform.right * x;//第一人称
cc.SimpleMove(dir * Time.deltaTime * 1000);//通过玩家控制器移动
}
}
起跳
void Jump()
{
if (Input.GetButtonDown(GameManagers.jump)&&Time.time>=nestJump)//判定游戏时间是否大于下一次起跳时间
{
nestJump = Time.time + jumpTimer;//下一次起跳时间
AudioSource.PlayClipAtPoint(jumpClip, Camera.main.transform.position, 1);//播放音效
transform.position = new Vector3(transform.position.x, transform.position.y + 1, transform.position.z);//起跳
Invoke("Down",0.5f);//计时结束,回到原位置
}
}
void Down()
{
transform.position = new Vector3(transform.position.x, transform.position.y - 1, transform.position.z);//起跳结束后向y轴负方向移动
}