首页 > 解决方案 > 如何制作带瞄准的射击技工?

问题描述

我目前正在制作一个自上而下的 2d 游戏并进行了基本的移动,但是角色并没有朝鼠标的方向转动,而是移动它只是朝移动的方向转动我不知道如何解决这个问题。

这是代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class script1 : MonoBehaviour
{
    public float moveSpeed;

    public Rigidbody2D rb;
    public Camera cam;

    private Vector2 moveDirection;
    Vector2 mousePos;

    Vector2 lookDir;

    void ProcessInputs()
    {
        float moveX = Input.GetAxisRaw("Horizontal");
        float moveY = Input.GetAxisRaw("Vertical");

        moveDirection = new Vector2(moveX, moveY); //TODO dont forget come  back later
    }

    // Update is called once per frame
    void Update()
    {
       ProcessInputs();

       mousePos = cam.ScreenToWorldPoint(Input.mousePosition);
    }
    void FixedUpdate()
    {
        lookDir = mousePos - rb.position;

        Move();
    }

   void Move()
   {
       rb.velocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);
       float angle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg - 90f;
       rb.rotation = angle;
   }
}

提前致谢。

标签: c#unity3d

解决方案


在你的Move()方法而不是使用rb.velocity你应该使用rb.MovePosition. 还要确保包括Time.fixedDeltaTimeTime.deltaTime一切正常运行。

rb.MovePosition(rb.position + moveSpeed * Time.fixedDeltaTime * moveDirection);
Vector2 lookDir = mousePos - rb.position;
float angle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg - 90f;
rb.rotation = angle;

我希望这能够帮到你。


推荐阅读