【问题标题】:Move camera on collision碰撞时移动相机
【发布时间】:2016-08-23 16:47:40
【问题描述】:

我有一个发生碰撞的场景。一旦发生碰撞,我希望相机从对象 1 平移到对象 2。我尝试在碰撞脚本中编写代码,但后来我意识到相机脚本将始终覆盖它,跟随对象 1。所以现在我正在尝试在相机脚本中编写它,但我不确定如何。

这是我的尝试:

public class CameraController : MonoBehaviour {
public GameObject player;
public GameObject player2;

private Vector3 offset;

// Use this for initialization
void Start () {
    offset = transform.position - player.transform.position;
}



    void OnCollisionEnter (Collision col) {
        if (col.gameObject.name == "triggerCube") {
            //SceneManager.LoadScene ("test2");


            transform.position = player2.transform.position + offset;


        }
        else {
            transform.position = player.transform.position;
        }
    }
}

即如果发生碰撞,则转换到玩家 2 的位置,但如果没有发生碰撞,则留在玩家 1。但是,c# 不允许在 void 的东西中使用这个 void,所以我希望有人对我有更好的解决方案?

我可以让它在不包含在后期更新中的情况下工作,但据我了解,在后期更新中包含它对于相机工作非常重要。

【问题讨论】:

  • 有一个 GO 成员变量,将其称为“targetToFollow”或其他名称,然后在 cam 的 LateUpdate() 中遵循它。发生碰撞时,将变量分配的 GO 更改为另一个对象(可能通过公共属性)。问题是您想如何应用该更改?一个很酷的动画重新聚焦到一个新的目标等,或者只是换掉跟随的对象?此解决方案适用于后一种情况
  • 必须是 GO 变量吗?我对 c# 很陌生,我还没有使用过这些。不过,你的想法是合理的。

标签: c# unity3d unity5


【解决方案1】:

这里有一个代码 sn-p 以便更好地理解:

public class CameraController : MonoBehaviour {
public GameObject player1;
public GameObject player2;
public GameObject focusPlayer; //either player1 or player2, initially player1

private Vector3 offset;

private void Start() { //could use player1 here as well, it doesn't matter offset = transform.position - focusPlayer.transform.position; }
private void OnCollisionEnter(Collision col) { if (col.gameObject.name == "triggerCube") { //layering? tagging? read up focusPlayer = player2; } else { focusPlayer = player1; } }
private void LateUpdate() { transform.position = focusPlayer.transform.position + offset; }

通过这种方式,您可以添加更多的玩家、不同的对象来聚焦相机等,这样整个事情就会更加动态,更容易阅读或维护。
如果您想要平滑的相机移动,如果目标已更改,添加一个 float/Vector2-3/wetc 成员变量并将其称为(例如)“targetOffsetDiff”。每当 cam 获得新目标时,将其设置为当前目标与新目标之间的差异。
向 LateUpdate() 添加一个“if”以测试变量的值:如果它不为零,则 lerp 直到它得到(接近)零并重置它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多