Unity:仅在父级旋转的情况下才允许子对象在指定轴上旋转

问题描述

enter image description here

我已经创建了一个小地图,并且在小地图中(右上角)显示了敌人的当前位置,所以我创建了导航图像并将其作为敌人GameObject的子代附加。

但是导航图像也会随着其父级Gameobject(敌人)一起旋转,因此在迷你地图中也会随之旋转。我希望导航图像仅在x轴上旋转,以便在迷你地图中正确可见。

using UnityEngine.AI;

[RequireComponent(typeof(NavMeshAgent))]
public class EnemyFollow : MonoBehavIoUr {

    private RaycastHit hit;
    
    NavMeshAgent mAgent;
    
    public Transform player;
    
    private TargetPlayer target;
    
    public GameObject impactEffect;
    
    public int damagetoPlayer = 10;
    private int range = 100;



    void Start() {
        mAgent = GetComponent<NavMeshAgent>();
      
    }

    void Update() {
    
        transform.LookAt(player);
        
        if (Physics.Raycast(transform.position,transform.forward,out hit,range)) {
        
            if ("Player".Equals(hit.transform.tag)) {
            
                //follow player
                mAgent.destination = player.position;
                
                //shoot bullet
                GameObject impactDestroy = Instantiate(impactEffect,hit.point,Quaternion.LookRotation(hit.normal));
                Destroy(impactDestroy,1f);
                
                //damage to Player
                target = hit.transform.GetComponent<TargetPlayer>();
                if (target != null) {
                    target.Takedamage(damagetoPlayer);
                }
            }
            
         
        }
    }

}

解决方法

enter image description here

我找到了一个非常简单的解决方案

只需将此脚本附加到您仅想在x轴上旋转的子对象中

Using Unity

public class BlockRotation: MonoBehaviour {

    void Update()  {

    transform.eulerAngles = new Vector3(0,transform.eulerAngles.y,0);

    }
}
,

将旋转应用于小地图时,另一种简单的解决方案是使用Transform.RotateAround()。如果还没有,则需要确定当前角度和所需角度之间的差;看起来像这样:

  float deltaAngle = desiredAngle - currentAngle;
  transform.RotateAround(transform.position,Vector3.up,deltaAngle);