Как исправить ошибку «Ошибка CS0029 Не удается неявно преобразовать тип« UnityEngine.Quaternion »в« UnityEngine.Vector3 » - PullRequest
0 голосов
/ 28 апреля 2019

Я делаю часть кода, чтобы взять вращение моего игрока и добавить его к другому объекту.Там написано: «Ошибка CS0029 Невозможно неявно преобразовать тип« UnityEngine.Quaternion »в« UnityEngine.Vector3 »

Я пробовал искать в Интернете, но не думаю, что их решения будут работать с моим кодом.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletCreator : MonoBehaviour {

    public Vector3 MyGameObjectPosition;
    public Vector3 MyGameObjectRotation;



    //drag prefab here in editor
    public Transform InstantiateMe;

    private void Start()
    {



    }

    // Update is called once per frame
    void Update()
    {
        MyGameObjectPosition = GameObject.Find("L96_Sniper_Rifle").transform.position;
        MyGameObjectRotation = GameObject.Find("L96_Sniper_Rifle").transform.rotation;

        if (Input.GetMouseButtonDown(0))
        {
            //you don't have to instantiate at the transform's positio nand rotation, swap these for what suits your needs
            var go = Instantiate(InstantiateMe, MyGameObjectPosition, transform.rotation);

        }
    }
}

Следует установить значение поворота объекта равное значению игрока.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2019

Просто измените это:

public Vector3 MyGameObjectRotation;

на это:

public Quaternion MyGameObjectRotation;

И все остальное должно работать.

0 голосов
/ 29 апреля 2019

Это должен быть ваш сценарий.

    public Vector3 MyGameObjectPosition;
public Quaternion MyGameObjectRotation;



//drag prefab here in editor
public Transform InstantiateMe;

private void Start()
{



}

// Update is called once per frame
void Update()
{
    MyGameObjectPosition = GameObject.Find("L96_Sniper_Rifle").transform.position;
    MyGameObjectRotation = GameObject.Find("L96_Sniper_Rifle").transform.rotation;

    if (Input.GetMouseButtonDown(0))
    {
        //you don't have to instantiate at the transform's positio nand rotation, swap these for what suits your needs
        var go = Instantiate(InstantiateMe, MyGameObjectPosition, transform.rotation);

    }
}
0 голосов
/ 28 апреля 2019

На какой строке вы получаете сообщение об ошибке?Это довольно очевидно.Vector3 (трехмерный вектор) и Quaternion (кватернион - это математическое представление вращения) - это две разные вещи, которые нельзя связать друг с другом.

Если вы хотите XYZ-представление вращения (аналогичното, что показывает редактор), это называется «угол Эйлера».Вы можете преобразовать кватернион в его представление углов Эйлера следующим образом:

Quaternion q;
Vector3 v = q.eulerAngles;

И вы можете преобразовать вектор3, содержащий углы Эйлера, в соответствующий кватернион следующим образом:

Vector3 v;
Quaternion q = Quaternion.euler(v);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...