unity3d实现一个人物跟随鼠标点击地面那点就移动那点,实-创新互联
//人物方向和判断点击事件加点击特效
成都创新互联公司专注于吉木乃网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供吉木乃营销型网站建设,吉木乃网站制作、吉木乃网页设计、吉木乃网站官网定制、微信小程序开发服务,打造吉木乃网络公司原创品牌,更为您提供吉木乃网站排名全网营销落地服务。using UnityEngine;
using System.Collections;
public class playerDir : MonoBehaviour {
public GameObject effect_click_prefab;
private bool isMoving=false;//鼠标是否被按下
public Vector3 targetPosition=Vector3.zero;//目标位置
private PlayerMove playerMove;
void Start()
{
targetPosition=transform.position;
playerMove=this.GetComponent
}
void Update ()
{
if(Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//拿到鼠标按下的点
RaycastHit hitInfo;
bool isCollider=Physics.Raycast(ray,out hitInfo);//定义一个射线
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)
{
//得到需要移动到的目标位置
//让角色朝向目标位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//拿到鼠标按下的点
RaycastHit hitInfo;
bool isCollider=Physics.Raycast(ray,out hitInfo);//定义一个射线
if(isCollider&&hitInfo.collider.tag==Tags.ground)//判断射线是否和地面接触碰撞
{
//让当前对象对着射线的方向
LookAtTarget(hitInfo.point);
}
}
else
{
if(playerMove.isMoving)
{
LookAtTarget(targetPosition);
}
}
}
//实例化显示特效效果
void ShowClickEffect(Vector3 hitPoint)
{
hitPoint=new Vector3(hitPoint.x,hitPoint.y+0.1f,hitPoint.z);
GameObject.Instantiate(effect_click_prefab,hitPoint,Quaternion.identity);
}
//让角色朝向目标位置和朝向的改变
void LookAtTarget(Vector3 hitPoint)
{
targetPosition=hitPoint;
targetPosition=new Vector3(targetPosition.x,transform.position.y,targetPosition.z);//得到主角朝向位置
this.transform.LookAt(targetPosition);//让主角改变
}
}
//人物移动
using UnityEngine;
using System.Collections;
//角色状态
public enum PlayerState
{
Moving,//移动
Idle //闲着
}
public class PlayerMove : MonoBehaviour {
public float speed=4f;
public PlayerState state=PlayerState.Idle;//默认状态为Idle
private playerDir dir;
private CharacterController controller;//角色控制器
public bool isMoving=false;
void Start()
{
dir=this.GetComponent
controller=this.GetComponent
}
void Update ()
{
float distance=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;
}
}
}
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:unity3d实现一个人物跟随鼠标点击地面那点就移动那点,实-创新互联
网页URL:http://scyanting.com/article/dchshh.html