【发布时间】:2015-08-06 11:51:07
【问题描述】:
阅读本文时,请记住我对编程和 Unity 都是新手,因此我可能会遗漏 Unity 提供的一些术语或工具。请以 ELI5 的方式详细说明您的答案。提前致谢!
我目前正在为一个小型个人项目研究一些游戏物理。目前我已经创建了一个平台,一个角色以及应该是什么,一个跟随伙伴。
但是,由于我还没有达到可以自己创建完美代码的水平,所以我找到了一个“敌人”脚本并尝试对其进行一些修改。 它可以在一定范围内工作,但需要一些调整,希望我能帮助你们了解。
这就是它现在的样子(橙色方块是同伴)
它跟随玩家,我可以调整速度以适应同伴,而不是玩家。然而,正如图片所示,同伴跑向玩家的中心。我想要创建的是一个跟随玩家,但仍然与玩家保持小距离的同伴。
我的第一个想法是创建某种永久偏移,但我无法弄清楚如何在不搞乱跟随功能的情况下做到这一点。
我希望你能帮助我,将不胜感激!
这是供参考的代码。
附加到播放器的代码:
using UnityEngine;
using System.Collections;
public class PlayerCompanion : MonoBehaviour
{
//In the editor, add your wayPoint gameobject to the script.
public GameObject wayPoint;
//This is how often your waypoint's position will update to the player's position
private float timer = 0.5f;
void Update ()
{
if (timer > 0) {
timer -= Time.deltaTime;
}
if (timer <= 0) {
//The position of the waypoint will update to the player's position
UpdatePosition ();
timer = 0.5f;
}
}
void UpdatePosition ()
{
//The wayPoint's position will now be the player's current position.
wayPoint.transform.position = transform.position;
}
}
附加到同伴的代码:
using UnityEngine;
using System.Collections;
public class FollowerOffset : MonoBehaviour {
//You may consider adding a rigid body to the zombie for accurate physics simulation
private GameObject wayPoint;
private Vector3 wayPointPos;
//This will be the zombie's speed. Adjust as necessary.
private float speed = 10.0f;
void Start ()
{
//At the start of the game, the zombies will find the gameobject called wayPoint.
wayPoint = GameObject.Find("wayPoint");
}
void Update ()
{
wayPointPos = new Vector3(wayPoint.transform.position.x, transform.position.y, wayPoint.transform.position.z);
//Here, the zombie's will follow the waypoint.
transform.position = Vector3.MoveTowards(transform.position, wayPointPos, speed * Time.deltaTime);
}
}
撞,我猜? :)
【问题讨论】:
-
如果你给两者都添加一个刚体,那么 Unity 的内置物理会阻止跟随者“进入”目标。
-
@MickyDuncan 尝试为两个对象添加刚体,似乎没有任何改变
-
哦,您正在使用
Vector3.MoveTowards()- 覆盖刚体。看看这个answers.unity3d.com/questions/368727/… -
所以我正在尝试使用您的链接显示的代码,但是我收到错误:“var dir: Vector3”“:”是一个意外的符号。我把那个代码放错地方了吗?目前我把它都放在了 void Update()
-
他们的例子是 UnityScript。 c# 代码将是
var dir = targetPos - transform.position;有关转换的帮助,请参阅 m2h.nl/files/js_to_c.php