Error cs1503 argument 2 cannot convert from unityengine vector3 to unityengine transform

using UnityEngine; using System.Collections; public class Tree : MonoBehaviour { public int Health = 5; public Transform logs; public Transform coconut; public GameObject tree; public Camera myC...

First of all, when you have 1 compile time error in your code, you stop and fix it before writing more code. You can’t just create errors on top of other errors in your code.

There are more than 13 errors in your code but only 2 mistakes created those errors.

1.You must use a new keyword to create a new vector. One exception is when you are calling static functions or constructors such as Vector3.zero,Vector3.up and so on.

So replace Vector3(Random.Range... with new Vector3(Random.Range.....

And tree.transform.position + Vector3(0, 0, 0) with tree.transform.position + new Vector3(0, 0, 0)

Do this for 5 other mistakes too.

2.Vector3 takes float,float,float as a parameter not int,int,int.

In this line of Vector3(Random.Range(-1.0, 1.0), 0, Random.Range(-1.0, 1.0));, you are passing in int to Vector3 instead of float. To fix this, you put f after each value in the Random.Range function. The f lets the compiler know that this is a float not int. If you don’t. Random.Range int overload method will be called instead of float function overload.

So again change Vector3(Random.Range(-1.0, 1.0), 0, Random.Range(-1.0, 1.0)); to new Vector3(Random.Range(-1.0f, 1.0f), 0, Random.Range(-1.0f, 1.0f));.

public class Tree : MonoBehaviour
{

    public int Health = 5;
    public Transform logs;
    public Transform coconut;
    public GameObject tree;

    public Camera myCamera;

    public int speed = 8;

    void Start()
    {
        tree = this.gameObject;
        GetComponent<Rigidbody>().isKinematic = true;
        myCamera = GameObject.FindObjectOfType<Camera>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Health > 0)
        {
            if (Vector3.Distance(transform.position, myCamera.transform.root.transform.position) < 10f)
            {
                if (Input.GetKeyDown(KeyCode.R) && WeaponSwitching.check == true)
                {
                    Ray ray = new Ray(myCamera.transform.position, myCamera.transform.forward);
                    RaycastHit hit;
                    if (Physics.Raycast(ray, out hit, 10f))
                    {
                        if (hit.collider.gameObject == gameObject)
                        {
                            --Health;
                        }
                    }
                }
            }
        }

        if (Health <= 0)
        {
            GetComponent<Rigidbody>().isKinematic = false;
            GetComponent<Rigidbody>().AddForce(transform.forward * speed);
            DestroyTree();
        }
    }

    void DestroyTree()
    {

        wait();

        Destroy(tree);

        Vector3 position = new Vector3(Random.Range(-1.0f, 1.0f), 0, Random.Range(-1.0f, 1.0f));
        Instantiate(logs, tree.transform.position + new Vector3(0, 0, 0) + position, Quaternion.identity);
        Instantiate(logs, tree.transform.position + new Vector3(2, 2, 0) + position, Quaternion.identity);
        Instantiate(logs, tree.transform.position + new Vector3(5, 5, 0) + position, Quaternion.identity);

        Instantiate(coconut, tree.transform.position + new Vector3(0, 0, 0) + position, Quaternion.identity);
        Instantiate(coconut, tree.transform.position + new Vector3(2, 2, 0) + position, Quaternion.identity);
        Instantiate(coconut, tree.transform.position + new Vector3(5, 5, 0) + position, Quaternion.identity);
    }

    IEnumerator wait()
    {
        yield return new WaitForSeconds(7.0f);
    }
}

Purple__Drunk

27 / 26 / 2

Регистрация: 26.12.2020

Сообщений: 86

1

10.01.2021, 19:43. Показов 9531. Ответов 2

Метки unity (Все метки)


Есть спрайт персонажа и пустой обьект, прицепленный к нему в роли точки для вылета пули.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  public class EnemyGun : MonoBehaviour
{
    public GameObject bullet;
 
    public float AttackDistance;
    public GameObject Player;
    
    void Start()
    {
       
    }
 
  
    void Update()
    {
        Vector3 difference = Camera.main.ScreenToWorldPoint(Player.transform.position) - transform.position;
        float RotZ = Mathf.Atan2(difference.x, difference.y) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, RotZ);
 
        if (Vector3.Distance (Player.transform.position, transform.position) <= AttackDistance)
        {
            Instantiate(bullet, transform.position);
        }
    }
}

Ругается на

C#
1
 Instantiate(bullet, transform.position);

Аргумент 2: не удается преобразовать из «UnityEngine.Vector3» в «UnityEngine.Transform».

Но как обозначить точку вылета по другому? И почему всегда это работало, а сейчас нет? Из-за проверки в if? Тогда как проверить дистанцию не вектором? И вообще как условие проверки относится к выполняеммой инструкции?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



2496 / 1512 / 803

Регистрация: 23.02.2019

Сообщений: 3,689

10.01.2021, 20:03

2

Лучший ответ Сообщение было отмечено Purple__Drunk как решение

Решение

Посмотрите внимательно на перегрузки метода Instantiate https://docs.unity3d.com/Scrip… tiate.html
Если вы выбираете только два паремеира, то второй параметр подразумевает будущего родителя, а не позицию.
Вам подойдёт метод с тремя или четырьмя параметрами, где есть позиция и поворот.



2



Tornamic

0 / 0 / 0

Регистрация: 02.12.2021

Сообщений: 9

03.05.2022, 18:55

3

C#
1
2
3
4
5
Quaternion rot = new Quaternion(0,0,0,0); // x,y,z,w
if (Vector3.Distance (Player.transform.position, transform.position) <= AttackDistance)
{
            Instantiate(bullet, transform.position, rot);
}

Можно так, у меня работает



0



Поворот объекта

Поворот объекта

Здравствуйте! Такой вопрос: хотел сделать что бы куб поворачивался в сторону игрока написал простенький скрипт:

Используется csharp

using UnityEngine;
using System.Collections;

public class EnemyAI : MonoBehaviour
{
        public int rotationSpeed;

        private GameObject myTarget;

        // Use this for initialization
        void Start ()
        {
                myTarget = GameObject.FindGameObjectWithTag(«Player»);
        }

       
        // Update is called once per frame
        void Update ()
        {
                Debug.DrawLine(myTarget.transform.position, this.transform.position, Color.red);
                this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(myTarget.transform.position this.transform.position), rotationSpeed * Time.deltaTime);
        }
}

Все хорошо но поворачивается куб во всех трех направлениях а мне надо только в горизонтальной плоскости? Так же я пробовал просто покрутить куб вокруг оси Y

Используется csharp

this.transform.rotation.y += 2

, но он ругается на несоответствие типов? Я пилю Unity второй день так что за банальность прошу прощения.

condor
UNец
 
Сообщения: 6
Зарегистрирован: 15 ноя 2012, 22:44

Re: Поворот объекта

Сообщение Volandpro 15 ноя 2012, 23:08

Попробуй вместо myTarget.transform.position — this.transform.position написать Vector3, где x и z будут соответственно равны x и z от myTarget.transform.position — this.transform.position, а у равен 0. Делать rotation.y=0 нельзя, нельзя менять значение по отдельной оси, нужно менять сразу весь rotation

Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Поворот объекта

Сообщение condor 15 ноя 2012, 23:20

Изменил на

Используется csharp

               

Vector3 abc = new Vector3(myTarget.transform.position.x this.transform.position.x, 0, myTarget.transform.position.z this.transform.position.z);
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, abc, rotationSpeed * Time.deltaTime);

Но Unity дает сразу две ошибки??

condor
UNец
 
Сообщения: 6
Зарегистрирован: 15 ноя 2012, 22:44

Re: Поворот объекта

Сообщение Volandpro 15 ноя 2012, 23:24

myTarget.transform.position.x — this.transform.position.x нельзя так писать) Ты меняешь значение x от myTarget.transform.position, надо менять сразу весь position. Попробуй (myTarget.transform.position- this.transform.position).x авось получится) Нету сейчас юнити под рукой, так что проверить не могу

P.S. лучше всегда пиши, что за ошибка, так легче понять будет

Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Поворот объекта

Сообщение condor 15 ноя 2012, 23:34

изменил на

Используется csharp

       

Vector3 abc = new Vector3((myTarget.transform.position this.transform.position).x, 0, (myTarget.transform.position this.transform.position).z);
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, abc, rotationSpeed * Time.deltaTime);

Ошибки:
error CS1503: Argument `#2′ cannot convert `UnityEngine.Vector3′ expression to type `UnityEngine.Quaternion’
error CS1502: The best overloaded method match for `UnityEngine.Quaternion.Slerp(UnityEngine.Quaternion, UnityEngine.Quaternion, float)’ has some invalid arguments

Насколько я понял я неправильно задаю Vector3 и отсюда сразу две ошибки

condor
UNец
 
Сообщения: 6
Зарегистрирован: 15 ноя 2012, 22:44

Re: Поворот объекта

Сообщение Volandpro 15 ноя 2012, 23:36

Ну вот все понятно) abc должен быть не Вектор3, а кватернион. А тебе нужно, чтобы объект медленно поворачивался или сразу? А нене, чо то я затупил, пиши Quaternion.LookRotation(abc).
Quaternion.Slerp(this.transform.rotation,Quaternion.LookRotation(abc), rotationSpeed * Time.deltaTime);

Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Поворот объекта

Сообщение condor 15 ноя 2012, 23:43

Желательно плавно. Изменил на

Используется csharp

Quaternion abc = new Quaternion((myTarget.transform.position this.transform.position).x, 0, (myTarget.transform.position this.transform.position).z, 0);

, ошибок нет но объект перевернулся с ног на голову, а так вроде поворачивается.

condor
UNец
 
Сообщения: 6
Зарегистрирован: 15 ноя 2012, 22:44

Re: Поворот объекта

Сообщение Volandpro 15 ноя 2012, 23:46

Ненене, ща объясню)

Используется csharp

Vector3 abc = new Vector3(myTarget.transform.position.x this.transform.position.x, 0, myTarget.transform.position.z this.transform.position.z);
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(abc), rotationSpeed * Time.deltaTime);

Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Поворот объекта

Сообщение condor 15 ноя 2012, 23:53

Большое Спасибо!!!! То что надо! А есть ли какая нибудь документация на русском типа Unity help, или какой нибудь сборник простеньких скриптов и примеров наподобие этого?

condor
UNец
 
Сообщения: 6
Зарегистрирован: 15 ноя 2012, 22:44

Re: Поворот объекта

Сообщение Volandpro 15 ноя 2012, 23:57

Уроки от Огасоды и этот форум) на самом деле здесь есть дохренища всего, почти все)

viewtopic.php?f=105&t=2051

Вот эта темка очень полезна

Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Поворот объекта

Сообщение condor 16 ноя 2012, 00:00

Ладно буду искать, невпервой. Еще раз Спасибо!!! Чувчтвую я еще помучаю этот форум ;) ;)

condor
UNец
 
Сообщения: 6
Зарегистрирован: 15 ноя 2012, 22:44

Re: Поворот объекта

Сообщение Volandpro 16 ноя 2012, 00:00

Я его почти каждый день мучаю)

Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 31



Проблемка со скриптом.

Georgiy0912 Дата: Вторник, 10 Июля 2012, 20:49 | Сообщение # 1

почетный гость

Сейчас нет на сайте

Решил ближе познакомиться с Instantiate, но почти все уроки на JS, а я люблю CS, так, что пришлось переводить, но я где то накосячил, сам не знаю где((
Вот оригинал:

var projectile : Rigidbody;
var speed = 20;

function Update () {
if (Input.GetMouseButtonDown(0))
{
var instantiatedProjectile : Rigidbody = Instantiate( projectile, transform.position, transform.rotation);
instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0, 0, speed));
Physics.IgnoreCollision( instantiatedProjectile.collider, transform.root.collider);
}
}

В моём переводе:

1. using UnityEngine;
2. using System.Collections;
3.
4. public class Missile : MonoBehaviour {
5. Rigidbody projectile;
6. int speed = 20;
7.
8. void Update (){
9. if (Input.GetMouseButtonDown(0))
10. {
11. Rigidbody instantiatedProjectile = Instantiate( projectile, transform.position, transform.rotation);
12. instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0, 0, speed));
13. Physics.IgnoreCollision( instantiatedProjectile.collider, transform.root.collider);
14. }
15. }
16. }

Вот ошибки:
1. Assets/Tutorial/Missile.cs(11,11): error CS0266: Cannot implicitly convert type `UnityEngine.Object’ to `UnityEngine.Rigidbody’. An explicit conversion exists (are you missing a cast?)
2. Assets/Tutorial/Missile.cs(12,64): error CS0119: Expression denotes a `type’, where a `variable’, `value’ or `method group’ was expected
3. Assets/Tutorial/Missile.cs(12,45): error CS1502: The best overloaded method match for `UnityEngine.Transform.TransformDirection(UnityEngine.Vector3)’ has some invalid arguments
4. Assets/Tutorial/Missile.cs(12,45): error CS1503: Argument `#1′ cannot convert `object’ expression to type `UnityEngine.Vector3′

Я так понял, что я пытаюсь присвоить переменной одного типа, значение другого, но как это исправить?

seaman Дата: Вторник, 10 Июля 2012, 21:47 | Сообщение # 2

старожил

Сейчас нет на сайте

Любите C#? Тогда должны знать, что он не любит неявного приведения типов. Что Вам написало? Что не может привести тип Object к типу Rigidbody. Что нужно сделать? Привести!
Rigidbody instantiatedProjectile = Instantiate( projectile, transform.position, transform.rotation) as Rigidbody;
Georgiy0912 Дата: Вторник, 10 Июля 2012, 23:14 | Сообщение # 3

почетный гость

Сейчас нет на сайте

спасибо

Добавлено (10.07.2012, 23:14)
———————————————
Хотя, остальные 3 ошибки мне всё же не понятны cry

seaman Дата: Вторник, 10 Июля 2012, 23:35 | Сообщение # 4

старожил

Сейчас нет на сайте

Учите C# — тогда будет все понятно.
2. — переменная Vector3 не так создается. Слышали о таком слове new?
Нужно new Vector3(0, 0, speed)
3 и 4 из-за этого же.
Georgiy0912 Дата: Среда, 11 Июля 2012, 16:31 | Сообщение # 5

почетный гость

Сейчас нет на сайте

Ещё проблема с переводом!

Вот оригинал:

var explosionTime = 1.0;
var explosionRadius = 5.0;
var explosionPower = 2000.0;

function Start () {
Destroy(gameObject, explosionTime);
var colliders : Collider[] = Physics.OverlapSphere(transform.position, explosionRadius);
for( var hit in colliders ){
if(hit.rigidbody){
hit.rigidbody.AddExplosionForce(explosionPower, transform.position, ExplosionRadius);
}
}
if ( partileEmitter ) {
particleEmitter.emit = true;
yield WaitForSeconds(0.5);
particleEmitter.emit = falce;
}
}
}

Вроде бы всё понятно, но не могу перевести вот это условие:

for( var hit in colliders ){}

Я чёт вообще не понял, что значит «var hit in colliders». cry

Сообщение отредактировал Georgiy0912Среда, 11 Июля 2012, 16:41

Злой_Ублюдок Дата: Среда, 11 Июля 2012, 16:39 | Сообщение # 6

Конструктороненавистник

Сейчас нет на сайте

Это бред какой-то.

var hit colliders, наверное, означает объявление переменной colliders типа hit.

а For — это цикл. Т.е. for(var hit colliders) — это «пока есть переменная, делать что-то». Короче, бред.



Боже, боже, которого-то в сущности и нет, до чего ты, которого на самом деле-то и нет, довел игродела?!

Georgiy0912 Дата: Среда, 11 Июля 2012, 16:42 | Сообщение # 7

почетный гость

Сейчас нет на сайте

Злой_Ублюдок, пересмотри пожалст ещё раз, а то я тутор не до конца посмотрел. Сейчас всё поправил, должно быть правильно.
Злой_Ублюдок Дата: Среда, 11 Июля 2012, 16:44 | Сообщение # 8

Конструктороненавистник

Сейчас нет на сайте

Вот, теперь все правильно.
Честно признаюсь, С-шарп в глаза-то не видел. Кинь пример скрипта на нем (другой), я тебе этот попробую переделать.


Боже, боже, которого-то в сущности и нет, до чего ты, которого на самом деле-то и нет, довел игродела?!

Georgiy0912 Дата: Среда, 11 Июля 2012, 16:46 | Сообщение # 9

почетный гость

Сейчас нет на сайте

Всмысле любой? Щас, найду…

Добавлено (11.07.2012, 16:46)
———————————————
Ну например вот:

using UnityEngine;
using System.Collections;

public class Missile : MonoBehaviour {
public Rigidbody projectile;
int speed = 20;

void Update (){
if (Input.GetMouseButtonDown(0))
{
Rigidbody instantiatedProjectile = Instantiate( projectile, transform.position, transform.rotation) as Rigidbody;
instantiatedProjectile.velocity = transform.TransformDirection(new Vector3(0, 0, speed));
Physics.IgnoreCollision( instantiatedProjectile.collider, transform.root.collider);
}
}
}

Злой_Ублюдок Дата: Среда, 11 Июля 2012, 16:52 | Сообщение # 10

Конструктороненавистник

Сейчас нет на сайте

Хм. Не получается.

Короче,

Code

for( var hit in colliders ){
if(hit.rigidbody){
hit.rigidbody.AddExplosionForce(explosionPower, transform.position, ExplosionRadius);
}

Означает:
Пока в colliders есть переменная hit
Если hit.rigidbody не равно null
Создать взрыв.


Боже, боже, которого-то в сущности и нет, до чего ты, которого на самом деле-то и нет, довел игродела?!

seaman Дата: Среда, 11 Июля 2012, 16:52 | Сообщение # 11

старожил

Сейчас нет на сайте

for( var hit in colliders ) == foreach( var hit in colliders )
Georgiy0912 Дата: Среда, 11 Июля 2012, 16:58 | Сообщение # 12

почетный гость

Сейчас нет на сайте

Спасибо, но хотелось бы по подробней, жду еще ответы.
seaman, я не понял, что ты имел в виду.
iNikit Дата: Среда, 11 Июля 2012, 20:03 | Сообщение # 13

участник

Сейчас нет на сайте

Пардон за оффтоп, но не забывайте пожалуйста пользоваться BB-кодом [code][/code] для обработки какого-либо кода, в глаза режет куча некрасивых строк. wacko



Самый лучший юзер GCUP :3

Сообщение отредактировал iNikitСреда, 11 Июля 2012, 20:04

IIyxMASTER Дата: Четверг, 12 Июля 2012, 06:46 | Сообщение # 14

постоянный участник

Сейчас нет на сайте

Quote (Georgiy0912)

Спасибо, но хотелось бы по подробней, жду еще ответы.
seaman, я не понял, что ты имел в виду.

Он хотел сказать что, прежде чем лезть в дерби кода, иди сперва хотяб циклы выучи…

seaman Дата: Четверг, 12 Июля 2012, 10:58 | Сообщение # 15

старожил

Сейчас нет на сайте

В шарпе цикл по всем элементам массива(списка и т.п.) записывается так как в моем сообщении справа, а не так как Вы записали (слева).
ЗЫ: Если Вы действительно «любите» шарп — изучайте его!
Georgiy0912 Дата: Четверг, 12 Июля 2012, 15:26 | Сообщение # 16

почетный гость

Сейчас нет на сайте

iNikit, ок
IIyxMASTER, Я знаю циклы
Блин ребят, я спросил, что значит var hit colliders, а вы мне про циклы толкаете… Вы меня не поняли, я отлично понимаю, что такое for, я не понимаю, как перевести на C# его условие — «var hit colliders», вот и все!
seaman Дата: Четверг, 12 Июля 2012, 16:06 | Сообщение # 17

старожил

Сейчас нет на сайте

Quote

Вы меня не поняли, я отлично понимаю, что такое for, я не понимаю, как перевести на C# его условие — «var hit colliders», вот и все!

Вы похоже не просто не понимаете, Вы читать не умеете. Я Вам давно уже все написал.
Более того не
var hit colliders
а —
var hit in colliders

Сообщение отредактировал seamanЧетверг, 12 Июля 2012, 16:06

sinoptis Дата: Четверг, 12 Июля 2012, 16:30 | Сообщение # 18

почетный гость

Сейчас нет на сайте

Js

Code

for( var hit in colliders )

C#

Code

RaycastHit hit;
if(Physics.Raycast(ray,out hit,100)){
foreach(hit in colliders){
//трататата
  }
}

Если я конечно не ошибаюсь

Сообщение отредактировал sinoptisЧетверг, 12 Июля 2012, 16:34

Georgiy0912 Дата: Четверг, 12 Июля 2012, 17:39 | Сообщение # 19

почетный гость

Сейчас нет на сайте

Всем спасибо. Я наверное вас уже достал… но у меня опять проблема с переводом! biggrin

Собсно вот пациент на JS: var contact : ContactPoint = collision.contacts[0];

Он же после перевода на C#: ContactPoint contact = collision.contacts[0];

Вот на что ругается: Assets/Tutorial/Rocket.cs(14,46): error CS0103: The name `collision’ does not exist in the current context

seaman Дата: Четверг, 12 Июля 2012, 19:30 | Сообщение # 20

старожил

Сейчас нет на сайте

Quote

Если я конечно не ошибаюсь

Ошибаешься. Забыл var
Georgiy0912
данных мало

  • Страница 1 из 2
  • 1
  • 2
  • »

Понравилась статья? Поделить с друзьями:
  • Error cs1503 argument 2 cannot convert from double to float
  • Error cs1503 argument 1 cannot convert from void to string
  • Error cs1503 argument 1 cannot convert from unityengine vector3 to float
  • Error cs1503 argument 1 cannot convert from system collections ienumerable to string
  • Error cs1503 argument 1 cannot convert from string to int