Unity C# 实例化 "position + x, y, z"?
Unity C# instantiating "position + x, y, z"?
所以我有一个使用武器的角色,我目前将其设置为在我角色的位置上生成。我希望那个位置是我的角色加上一点点向右(x 轴)。我不知道该怎么做,也无法在 google 上找到答案。我是初学者所以请具体。这是我的代码:
public float speed = 2f;
Animator anim;
private Rigidbody2D rb2d;
public float jumpHeight = 20f;
public GameObject weapon;
private Vector2 playerPos;
public GameObject player;
private void Start()
{
anim = GetComponent<Animator>();
rb2d = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
playerPos = player.transform.position;
if (Input.GetKey(KeyCode.D))
{
anim.SetInteger("State", 1);
transform.Translate(new Vector2(1f * speed * Time.deltaTime, 0f));
}
if (Input.GetKeyUp(KeyCode.D))
{
anim.SetInteger("State", 3);
}
if (Input.GetKey(KeyCode.A))
{
anim.SetInteger("State", 2);
transform.Translate(new Vector2(-1f * speed * Time.deltaTime, 0f));
}
if (Input.GetKeyUp(KeyCode.A))
{
anim.SetInteger("State", 4);
}
if (Input.GetKey(KeyCode.P))
{
rb2d.AddForce(Vector2.up * jumpHeight);
}
if (Input.GetKeyDown(KeyCode.O))
{
Instantiate(weapon, playerPos, Quaternion.Euler(0, 0, -40));
}
}
在 Unity 中,Transform.position
是 Vector3
。您可以将两个 Vector3
与 +
运算符相加:
Vector3 result = myVectorA + myVectorB
// or
Vector3 result = new Vector3(5,6,7) + new Vector3(10,0,0) // result is (15,6,7)
要添加到 playerPos 的 x
值 - 您需要添加一个完整的 Vector3,它具有必要的翻译,因为它是 x
值。
playerPos + new Vector3(100, 0, 0)
有关 Unity 向量运算的详细信息,请参见此处:https://docs.unity3d.com/Manual/UnderstandingVectorArithmetic.html
Unity 上的这个答案解释了为什么您不能直接分配给 playerPos.x
:http://answers.unity3d.com/questions/600421/how-to-change-xyz-values-in-a-vector3-properly-in.html
所以我有一个使用武器的角色,我目前将其设置为在我角色的位置上生成。我希望那个位置是我的角色加上一点点向右(x 轴)。我不知道该怎么做,也无法在 google 上找到答案。我是初学者所以请具体。这是我的代码:
public float speed = 2f;
Animator anim;
private Rigidbody2D rb2d;
public float jumpHeight = 20f;
public GameObject weapon;
private Vector2 playerPos;
public GameObject player;
private void Start()
{
anim = GetComponent<Animator>();
rb2d = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
playerPos = player.transform.position;
if (Input.GetKey(KeyCode.D))
{
anim.SetInteger("State", 1);
transform.Translate(new Vector2(1f * speed * Time.deltaTime, 0f));
}
if (Input.GetKeyUp(KeyCode.D))
{
anim.SetInteger("State", 3);
}
if (Input.GetKey(KeyCode.A))
{
anim.SetInteger("State", 2);
transform.Translate(new Vector2(-1f * speed * Time.deltaTime, 0f));
}
if (Input.GetKeyUp(KeyCode.A))
{
anim.SetInteger("State", 4);
}
if (Input.GetKey(KeyCode.P))
{
rb2d.AddForce(Vector2.up * jumpHeight);
}
if (Input.GetKeyDown(KeyCode.O))
{
Instantiate(weapon, playerPos, Quaternion.Euler(0, 0, -40));
}
}
在 Unity 中,Transform.position
是 Vector3
。您可以将两个 Vector3
与 +
运算符相加:
Vector3 result = myVectorA + myVectorB
// or
Vector3 result = new Vector3(5,6,7) + new Vector3(10,0,0) // result is (15,6,7)
要添加到 playerPos 的 x
值 - 您需要添加一个完整的 Vector3,它具有必要的翻译,因为它是 x
值。
playerPos + new Vector3(100, 0, 0)
有关 Unity 向量运算的详细信息,请参见此处:https://docs.unity3d.com/Manual/UnderstandingVectorArithmetic.html
Unity 上的这个答案解释了为什么您不能直接分配给 playerPos.x
:http://answers.unity3d.com/questions/600421/how-to-change-xyz-values-in-a-vector3-properly-in.html