Unity2D游戏开发 角色跟随指针旋转实现

实现效果:

 实现代码:

using UnityEngine;

public class PlayerMoveScript : MonoBehaviour
{

    public float speed = 5f;

    private float angle;

    public Rigidbody2D rb;

    public Camera cam;

    Vector2 player_position; //Value obtained from keyboard

    Vector2 mouse_position; //The world coordinate position of the mouse

    Vector2 look_At; //The vector pointed by the player towards the mouse

    void Update()
    {
        player_position.x = Input.GetAxisRaw("Horizontal");
        player_position.y = Input.GetAxisRaw("Vertical");

        mouse_position = cam.ScreenToWorldPoint(Input.mousePosition);
    }
    private void FixedUpdate()
    {
        rb.MovePosition(rb.position + player_position * speed * Time.fixedDeltaTime);

        //look_At = mouse_position - player_position;  //pe Errors caused by using keyboard position as player position
        look_At = mouse_position - rb.position;


        angle = Mathf.Atan2(look_At.y, look_At.x) * Mathf.Rad2Deg;

        transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));

        test();//Debug测试代码
    }
    private void test()
    {
        Debug.Log(angle);
        Debug.Log(mouse_position);
        Debug.Log(rb.position);
    }
}

3代码说明:

3.1移动角色的实现:

        声明三个变量一个是speed用来存储可改变速度的大小,一个是rb用来存储目标的刚体,最后一个是player_position用来存储玩家一帧移动的量。然后在update()函数下通过Input类下的GetAxisRaw()方法从键盘获取水平和垂直移动的值(这个值在1,-1之间移动),最后在FixedUpdate()函数下通过rb类中的MovePosition()方法将目标刚体移动到指定位置。其中MovePosition的参数是是下一帧移动的位置,rb.position是目标物体现在的位置,player_position前面说过,speed也说过,Time.fixedDeltaTime我现在也解释不清楚,加了好像可以减轻游戏掉帧导致的瞬间位移问题。

3.2玩家随鼠标旋转的实现:

        这里需要一共需要五个变量,rb是之前的目标刚体,这里还需要用到。angle存储z轴旋转角度。cam存储目标摄像机。mouse_position存储鼠标的位置。look_at存储目标刚体指向鼠标的变量。然后在Update()方法中用Input类下的mousePosition获取鼠标位置,这里因为鼠标位置是屏幕坐标需要用cam类下的ScreenToWorldPoint()方法把屏幕坐标转化成世界坐标,在FixedUpdate()方法中用鼠标的世界位置减目标刚体的世界位置放入look_at,用Mathf类中Atan()方法获取向量从x轴开始旋转的角度的弧度,在通过乘以Mathf类中的Rad2Deg把弧度转化为角度,在通过quaternion.Euler()修改游戏对象的旋转。

到这里就结束了,希望对你有帮助。有不对的地方还请大佬多多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值