Unity3d - RPG项目学习笔记(二)

时间:2022-12-26 11:00:02

前期工程已实现了角色的选择, 现在开始进行制作角色在游戏场景的控制功能。

控制功能一: 鼠标点击地面产生点击效果

思路:读取鼠标点击位置,如果点击位置是地面,生成点击效果。

则明显需要使用射线检测,用于检测射线与地面的碰撞信息,则脚本如下:

public GameObject Click_Effect;  //定义游戏物体点击效果,将Prefabs赋值给变量

void upDate()

{

   if(Input.GetMouseDown(0))

    {

    Ray ray = camera.main.ScreenPiontToRay(Input.MousePosition);

    RaycastHit hitinfo;

    bool isCollider = Physics.Raycast(ray, out hitinfo );

    if( isCollider &&  hitinfo.collider.tag == "Ground")

    {

          GameObject.Instantiate(Click_Effect,hitinfo.point,Quaternion.identity); //注意此处的角度使用的是四元数 Quaternion.identity

    }

    }

}

这样就可以实现了点击地面出现点击效果的情况。

控制功能二:角色朝向点击地点的方向

思路:使用transform.LookAt()方法,找到目标地点的Vector3,在鼠标按下的情况下,进行朝向变化,脚本如下:

private Vector3 targetPosition; //定义目标地点

private bool isMoving = false; //定义移动状态标示位

在updata中 if(Input.GetMouseDown(o)) 中加入移动标示位 isMoving = true;

构建方法CharacterLook(),如下:

void  CharacterLook( Vector3 hitPosition )

{

     targetPosition = hitPosition;

     targetPosition = new Vector3( hitPosition.x,  tranform.position.y,hitpoint.z ); //注意:人物转向只发生在(x,z)平面,因此此处Y轴需定义为人物所在Y轴

     tranfrom.LookAt(targetPosition);

}

在Updata中加入条件检测

if(Input.GetMouseUp(0))

{
      isMoving = false;

}

if(isMoving)

{

    Ray ray = camera.main.ScreenPiontToRay(Input.MousePosition);

    RaycastHit hitinfo;

    bool isCollider = Physics.Raycast(ray, out hitinfo );

    if( isCollider &&  hitinfo.collider.tag == "Ground")

    {

          CharacterLook(hitinfo.point);

    }

}

这样就可以实现了角色的目视朝向以及点击地面产生点击效果的功能了、

今日的总结到此为止。