我是编程的新手,我正在为我的项目制作2D横向滚动功能。我有一个人工智能为我的敌人工作,但我的敌人物体被建模为平坦,所以只有一面是要显示的。当我开始游戏时,敌人会立即旋转以面对玩家,因为我希望它保持原样,但仍然朝向玩家。
http://i.imgur.com/TJYtfro.png这就是我希望敌人保持的状态,只需将这张脸展示为向玩家滑动而不旋转或倾斜。
http://i.imgur.com/n0gI2Rf.png当我开始游戏时会发生这种情况,这就是为什么我不想让物体旋转或倾斜。如果您想了解我所做的其他信息,或者我不清楚,请告诉我。这是我第一次在网上询问。
这是我为敌人获得的代码。我知道代码是完全错误的,但是我的编码知识非常有限,而且还在学习。
//------------Variables----------------//
public Transform target;
public int moveSpeed;
public int rotationSpeed;
public int maxdistance;
private Transform myTransform;
//------------------------------------//
void Awake()
{
myTransform = transform;
}
void Start ()
{
maxdistance = 2;
}
void Update ()
{
if(Vector3.Distance(target.position, myTransform.position) > maxdistance)
{
//Move towards target
transform.LookAt (target.position);
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
}
答案 0 :(得分:5)
你的问题是你对“前进”的含义有些困惑。你需要决定前进的方向。目前,“前进”是“超出屏幕”,因为你正在做一个2D侧卷轴并且你的所有敌人都面向屏幕外。
但是,您尝试使用LookAt()
让角色看到播放器。但当然它们会转向,因为每个敌人网格/模型的“前进”目前是他们脸上的方向。
您有两种选择。一种方法是将所有模型旋转90度,使其向前移动。在这种情况下,你仍然可以使用LookAt(),然后告诉敌人前进,但在视觉上他们仍然看着屏幕外。但是,如果你到达另一边,敌人会向后转身。所以可能不是一个好的选择。
另一个选择是你不应该使用“前进”向量设置敌方变换/位置。只需根据一个向量设置敌人位置,该向量是敌人位置和玩家位置之间的差异。从玩家位置向量中减去敌人位置向量,你将有一个指向玩家方向的向量。将其标准化以获得单位方向向量。然后将其乘以上面的移动速度和增量时间。使用它代替“前进”,你的敌人将朝向玩家。在这种情况下,你根本不打电话给LookAt()
,因为你总是希望敌人面对屏幕。
编辑:我没有Unity的副本,但它应该是这样的:
if (Vector3.Distance(target.position, myTransform.position) > maxdistance)
{
// Get a direction vector from us to the target
Vector3 dir = target.position - myTransform.position;
// Normalize it so that it's a unit direction vector
dir.Normalize();
// Move ourselves in that direction
myTransform.position += dir * moveSpeed * Time.deltaTime;
}