//人物方向和判断点击事件加点击特效

usingUnityEngine;
usingSystem.Collections;

publicclassplayerDir:MonoBehaviour{

publicGameObjecteffect_click_prefab;
privateboolisMoving=false;//鼠标是否被按下
publicVector3targetPosition=Vector3.zero;//目标位置

privatePlayerMoveplayerMove;

voidStart()
{
targetPosition=transform.position;
playerMove=this.GetComponent<PlayerMove>();

}

voidUpdate()
{

if(Input.GetMouseButtonDown(0))
{
Rayray=Camera.main.ScreenPointToRay(Input.mousePosition);//拿到鼠标按下的点
RaycastHithitInfo;
boolisCollider=Physics.Raycast(ray,outhitInfo);//定义一个射线
if(isCollider&&hitInfo.collider.tag==Tags.ground)//判断射线是否和地面接触碰撞
{
//判断是否点击到了UI层的东西
if(UICamera.hoveredObject.tag!="Accept"&&UICamera.hoveredObject.tag!="Inventory_item_grid"&&UICamera.hoveredObject.tag!="Inventory_item")
{
isMoving=true;
ShowClickEffect(hitInfo.point);
LookAtTarget(hitInfo.point);
}

}

}

//按下鼠标左建的时候停止运动
if(Input.GetMouseButtonUp(0))
{
isMoving=false;

}

if(isMoving)
{
//得到需要移动到的目标位置
//让角色朝向目标位置
Rayray=Camera.main.ScreenPointToRay(Input.mousePosition);//拿到鼠标按下的点
RaycastHithitInfo;
boolisCollider=Physics.Raycast(ray,outhitInfo);//定义一个射线
if(isCollider&&hitInfo.collider.tag==Tags.ground)//判断射线是否和地面接触碰撞
{
//让当前对象对着射线的方向
LookAtTarget(hitInfo.point);

}

}
else
{
if(playerMove.isMoving)
{
LookAtTarget(targetPosition);

}

}

}

//实例化显示特效效果
voidShowClickEffect(Vector3hitPoint)
{
hitPoint=newVector3(hitPoint.x,hitPoint.y+0.1f,hitPoint.z);
GameObject.Instantiate(effect_click_prefab,hitPoint,Quaternion.identity);

}

//让角色朝向目标位置和朝向的改变
voidLookAtTarget(Vector3hitPoint)
{
targetPosition=hitPoint;
targetPosition=newVector3(targetPosition.x,transform.position.y,targetPosition.z);//得到主角朝向位置
this.transform.LookAt(targetPosition);//让主角改变

}
}


//人物移动

usingUnityEngine;
usingSystem.Collections;

//角色状态
publicenumPlayerState
{
Moving,//移动
Idle//闲着


}

publicclassPlayerMove:MonoBehaviour{

publicfloatspeed=4f;
publicPlayerStatestate=PlayerState.Idle;//默认状态为Idle
privateplayerDirdir;
privateCharacterControllercontroller;//角色控制器
publicboolisMoving=false;

voidStart()
{
dir=this.GetComponent<playerDir>();
controller=this.GetComponent<CharacterController>();
}

voidUpdate()
{
floatdistance=Vector3.Distance(dir.targetPosition,transform.position);//计算目标位置到当前位置
if(distance>0.3f)
{
isMoving=true;
state=PlayerState.Moving;
controller.SimpleMove(transform.forward*speed);//角色移动

}
else
{
isMoving=false;
state=PlayerState.Idle;

}
}
}