问题描述
我已经创建了一个小地图,并且在小地图中(右上角)显示了敌人的当前位置,所以我创建了导航图像并将其作为敌人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);
}
}
}
}
}
解决方法
我找到了一个非常简单的解决方案
只需将此脚本附加到您仅想在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);