团结敌人精灵旋转跟随我的玩家

时间:2017-01-08 15:06:51

标签: c# unity3d sprite unity5

使用unity 5.4,自上而下2D游戏。

我的坦克敌人精灵有4种不同的剧本。一个是移动并瞄准我的玩家,一个是射击,另一个跟随玩家并且持续一个控制HP的伤害处理程序脚本。问题是当我玩游戏时我的精灵对角移动或面向我的玩家的相反方式。(见截图)。我的精灵一直固定在玩家身上。

enter image description here

enter image description here

我用来关注播放器的脚本是

using UnityEngine;
using System.Collections;

public class FollowPlayer : MonoBehaviour {

public float rotSpeed = 90f;
Transform player;

void Update () {
    if(player == null)
    {
        GameObject go = GameObject.Find("Player");

        if(go != null)
        {
            player = go.transform;
        }
    }
    if (player == null)
        return;

    Vector3 dir = player.position - transform.position;
    dir.Normalize();

    float zAngle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;

     Quaternion desiredRot= Quaternion.Euler(zAngle, 0, 0);
     transform.rotation = Quaternion.RotateTowards(transform.rotation, desiredRot, rotSpeed * Time.deltaTime);

}}

我相信我的精灵向玩家移动的问题是代码

的一部分
float zAngle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;

我不相信我理解这条线的全部含义。或者它太复杂了。

进一步澄清。我的坦克精灵必须跟随我的玩家(在任何时候,直到他们来到我身上),炮塔必须一直面向我的玩家,因为他们向我射击。我的子弹朝着正确的方向射击,但是我的精灵朝着我的玩家正确移动,但面向另一个方向。

1 个答案:

答案 0 :(得分:0)

不同的精灵可能有不同的前锋位置。添加public float rotationFix = 90f;然后靠近底部:float zAngle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg + rotationfix;并使用它来调整有效旋转并“修复”精灵的前向位置。

在游戏过程中,可以通过检查员轻松完成调整。