有没有办法让相机在游戏中跟随不同的游戏对象? C# 2d
Is there a way to make a camera follow a different GameObject in game? c# 2d
我已经有了跟随玩家的统一默认相机。但我希望它在一个角色和另一个角色之间切换,具体取决于我激活的是哪个角色。到目前为止我只有...
using UnityEngine;
using System.Collections;
public class cameraFollow : MonoBehaviour {
public Transform player;
public Transform player2;
void Update ()
{
transform.position = new Vector3 (player.position.x + .5f, player.position.y + .55f, -7.2f);
}
if(Input.GetKeyDown(KeyCode.Space)){
//switch to player2
}
}
有没有办法做到这一点或我应该专注于学习做那件事或其他什么?谢谢
首先,您的代码似乎无法编译,因为 if
语句位于可以执行它的任何块之外。仔细检查您的括号并相应地缩进您的代码。
要实现您想要的效果,请执行以下操作。添加一个 else
块,将您当前的关注代码移到那里,并在已经存在的 if
块中添加另一个对象的关注代码:
if (Input.GetKeyDown(KeyCode.Space)) {
transform.position = new Vector3(player2.position.x + .5f, player2.position.y + .55f, -7.2f);
}
else {
transform.position = new Vector3(player.position.x + .5f, player.position.y + .55f, -7.2f);
}
确保在 Update
方法中获取上述所有代码。
您可能还想考虑摆脱幻数,例如 .5f
、.55f
和 -7.2f
,并用命名合理的变量替换它们。例如,var offset = new Vector3(.5f, .55f, -7.2f)
可能没问题。
作为一般性建议,首先总体上提高您的编程技能会有所帮助。我怀疑在创建游戏的同时学习是保持积极性的好方法,但与此同时,您将 运行 遇到这样的问题,如果您对一般编程更熟悉的话,这些问题很容易避免.不过,学习方法没有错,所以如果这对您来说是个好方法,那就去做吧!
NVM 我知道了。感谢 Xying 让我开始编写非常重要的代码。现在是代码。
using UnityEngine;
using System.Collections;
public class cameraFollow : MonoBehaviour {
public Transform player;
public Transform player2;
private bool idleFollow = true;
private bool mountFollow = false;
void Update ()
{
if (!mountFollow && idleFollow && Input.GetKeyDown (KeyCode.Space))
{
mountFollow = true;
idleFollow = false;
return;
}
if (mountFollow && !idleFollow && Input.GetKeyDown(KeyCode.Space))
{
idleFollow = true;
mountFollow = false;
return;
}
if (idleFollow && !mountFollow)
{
transform.position = new Vector3 (player.position.x + .5f, player.position.y + .55f, -7.2f);
}
if (mountFollow && !idleFollow)
{
transform.position = new Vector3 (player2.position.x + .5f, player2.position.y + .55f, -7.2f);
}
}
}
我已经有了跟随玩家的统一默认相机。但我希望它在一个角色和另一个角色之间切换,具体取决于我激活的是哪个角色。到目前为止我只有...
using UnityEngine;
using System.Collections;
public class cameraFollow : MonoBehaviour {
public Transform player;
public Transform player2;
void Update ()
{
transform.position = new Vector3 (player.position.x + .5f, player.position.y + .55f, -7.2f);
}
if(Input.GetKeyDown(KeyCode.Space)){
//switch to player2
}
}
有没有办法做到这一点或我应该专注于学习做那件事或其他什么?谢谢
首先,您的代码似乎无法编译,因为 if
语句位于可以执行它的任何块之外。仔细检查您的括号并相应地缩进您的代码。
要实现您想要的效果,请执行以下操作。添加一个 else
块,将您当前的关注代码移到那里,并在已经存在的 if
块中添加另一个对象的关注代码:
if (Input.GetKeyDown(KeyCode.Space)) {
transform.position = new Vector3(player2.position.x + .5f, player2.position.y + .55f, -7.2f);
}
else {
transform.position = new Vector3(player.position.x + .5f, player.position.y + .55f, -7.2f);
}
确保在 Update
方法中获取上述所有代码。
您可能还想考虑摆脱幻数,例如 .5f
、.55f
和 -7.2f
,并用命名合理的变量替换它们。例如,var offset = new Vector3(.5f, .55f, -7.2f)
可能没问题。
作为一般性建议,首先总体上提高您的编程技能会有所帮助。我怀疑在创建游戏的同时学习是保持积极性的好方法,但与此同时,您将 运行 遇到这样的问题,如果您对一般编程更熟悉的话,这些问题很容易避免.不过,学习方法没有错,所以如果这对您来说是个好方法,那就去做吧!
NVM 我知道了。感谢 Xying 让我开始编写非常重要的代码。现在是代码。
using UnityEngine;
using System.Collections;
public class cameraFollow : MonoBehaviour {
public Transform player;
public Transform player2;
private bool idleFollow = true;
private bool mountFollow = false;
void Update ()
{
if (!mountFollow && idleFollow && Input.GetKeyDown (KeyCode.Space))
{
mountFollow = true;
idleFollow = false;
return;
}
if (mountFollow && !idleFollow && Input.GetKeyDown(KeyCode.Space))
{
idleFollow = true;
mountFollow = false;
return;
}
if (idleFollow && !mountFollow)
{
transform.position = new Vector3 (player.position.x + .5f, player.position.y + .55f, -7.2f);
}
if (mountFollow && !idleFollow)
{
transform.position = new Vector3 (player2.position.x + .5f, player2.position.y + .55f, -7.2f);
}
}
}