物体跟随鼠标旋转:主方法,transform.LookAt(point:Vector3)。用鼠标位置产生一条射线,Camera.main.ScreenPointToRay (Input.mousePosition)。使用Physics.Raycast()检测碰撞,当碰到碰撞体后,输出一个RaycastHit碰撞信息,把RayCastHit.point转给主方法中的point即可让主角朝向鼠标,注意Y轴固定!
三维物体移动:使用方法rigidbody.MovePosition(position : Vector3) : void 。当前位置加减键盘操作的偏移量,即:position=transform.position+new Vector3(Horizontal,0,Vertical)*speed*Time.deltaTime。
播放走动动画:在主角上面添加Animator组件,设置动画状态关系图,在Paramters中添加标志位如:Move、Dead等,并设置好Conditions。在脚本中调用Animator.SetBool(parameters:string,bool:bool)来激活动画。通过判断Horizontal或Vertical是否不等于0来判断主角是否移动,来播放动画。
受伤变红动画:当受到伤害时meshRender.material.color = Color.red物体变红,然后再慢慢恢复成原色
meshRender.material.color = Color.Lerp(meshRender.material.color, Color.white, smoothing * Time.deltaTime)
受伤减血:自定义一个方法。通过调用带形参的方法来实现受一次伤,减一次血。该方法中用hp自减形参。在使用时,只需传递一个形参即可。
间隔开枪:开枪是一下一下播放。因为要按下鼠标后才可以开始自动打枪,所以不能在非Update()中使用InvokeRepeating()方法播放动画(该方法一开始就会打枪),而只能在Update()中用计时来播放动画。如下:
timer += Time.deltaTime;//开始计时。
if (timer>1/shootRata)//当累计的时间大于开一枪的时间(开枪间隔1/shootRata)时开枪
{timer -= 1/shootRata;Shoot();}//减去一个开枪间隔时间使其不符合开枪条件,继续计时累积时间。
子弹轨迹:添加LineRenderer组件,使用LineRenderer.SetPostion(端点号:int,生成位置:Vector3)方法。一个端点在抢口,一个端点在枪口前方的碰撞体处。先以枪口为起始点,朝枪口前方画一条射线,并通过Physics.Raycast射线检测,并输出一个RaycastHit碰撞信息得到其点的Vector3。
追逐主角:使用导航网格寻路。首先烘焙生成环境的导航网格,然后给敌人添加导航组件NavMeshAgent,挂上脚本并使用NavMeshAgent.SetDestination(Vector3)方法(设置目标)。
敌人攻击:添加球形collider,使用OnTriggerStay(Collider other)方法,碰触触发器并停留时会持续调用此方法。在此方法下面调用TakeDamage()受伤方法。注意定义两时间变量,使方法受到时间周期控制。
相机跟随:在Camera写脚本,让相机的transform.position=用主角position+相机与主角位置差
播放粒子:particleSystem.Play()。在目标物体上播放:particleSystem.transform.position = position;
物体死亡声音:AudioSource.PlayClipAtPoint(clip : AudioClip, position : Vector3, volume : float = 1.0F),在制定点播放声音剪辑。