以与我的角色相同的方向射击子弹。 [UNITY 2D TOPDOWN]

时间:2015-04-23 14:13:16

标签: c# unity3d 2d unity3d-2dtools topdown

我搜索过Top Down 2D旋转的一堆帖子,发射导弹,但没有一个适用于我的。

我的巫师设法从他的魔杖中射出他的魔法导弹,但是他们的魔杖指向不对齐。 Examples它应该从魔杖的四元数中取出Z值并将其指定为它所出现的角度(或者至少是我认为它应该做的那样)但它似乎比魔杖旋转得更快虽然如果我旋转它确实会发生变化,但它并没有随着魔杖的变化而变化。因此,如果我指出它将会启动。如果我指向右侧45度,它会将导弹直接射入我的巫师。

导弹移动守则---------------

using UnityEngine;
using System.Collections;

public class MoveMissile : MonoBehaviour {

// Use this for initialization

public float speed = 0.5F;
public Transform Shotspawn;
// public Quaternion Direction;
private float Direction;
void Start (){

    // Sets the direction that shot is fired in.
    Direction = transform.rotation.eulerAngles.z;
    transform.Rotate(0 , 0, Direction);
}

// Update is called once per frame
void Update () {


    transform.Translate(Vector2.up * speed);
 }
}

角色运动守则---------------------------

 using UnityEngine;
 using System.Collections;

 public class TopDownCharController2 : MonoBehaviour {

 // Movement Variables
 public float walkSpeed;
 public bool colliding; 

 // Use this for initialization
 void Start () {

 }



 // Update is called once per frame
 void Update ()
 {

         if(Input.GetKey (KeyCode.I)) 
         {transform.Translate(Vector2.up * walkSpeed); } // UP MOVEMENT

         if(Input.GetKey(KeyCode.J)) 
         {transform.Translate(-Vector2.right * walkSpeed); } // LEFT MOVEMENT

         if(Input.GetKey(KeyCode.K)) 
         {transform.Translate(-Vector2.up * walkSpeed); }// DOWN MOVEMENT

         if(Input.GetKey(KeyCode.L)) 
         {transform.Translate(Vector2.right * walkSpeed); }// RIGHT MOVEMENT

         if(Input.GetKey(KeyCode.U)) {
             // Clockwise
             transform.Rotate(0, 0, -3.0f);
         }
         if(Input.GetKey(KeyCode.O)) {
             // Counter-clockwise
             transform.Rotate(0, 0, 3.0f); 


         }
     }             
 }

如果有人能告诉我哪里出错我会很可爱。 :)

1 个答案:

答案 0 :(得分:0)

所以它不起作用的原因是因为它读取方向然后再添加一点,所以它有点过度纠正。所以代码应该是:

using UnityEngine;
using System.Collections;

public class MoveMissile : MonoBehaviour {

// Use this for initialization

public float speed = 0.5F;
public Transform Shotspawn;
  void Start (){

   // Sets the direction that shot is fired in.
  transform.rotation=Shotspawn.rotation;
  }

  // Update is called once per frame
  void Update () {


  transform.Translate(Vector2.up * speed);
 }
}