我是编程的新手,我正在为我的项目制作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;
}
}
Run Code Online (Sandbox Code Playgroud)
你的问题是你对"前进"的含义有些困惑.你需要决定前进的方向.目前,"前进"是"超出屏幕",因为你正在做一个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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18825 次 |
| 最近记录: |