Ошибка cs1503 unity

I am new to Unity and C# code. I am doing a basic step by step tutorial from Brackeys and for no obvious reason I get this error that says «error CS1503: Argument 1: cannot convert from ‘float’ to ‘UnityEngine.Vector3′». The error appears on both rb.AddForce lines. Does anyone know what’s the problem here? I am using Unity 2020.3.29f1 Personal.

Thanks for your help.

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

public class PlayerMovement : MonoBehaviour
{

    public Rigidbody rb;

    public float forwardForce = 2000f;

    void FixedUpdate()
    {
        rb.AddForce(0, 0, forwardForce * Time.deltaTime);

        if (Input.GetKey("d") )
        {
            rb.AddForce(500 * Time.deltaTime);
        }

        if (Input.GetKey("a") )
        {
            rb.AddForce(-500 * Time.deltaTime);
        }
    }
}

derHugo's user avatar

derHugo

83.7k9 gold badges77 silver badges115 bronze badges

asked Mar 1, 2022 at 3:44

SmIqbal's user avatar

4

There are different overloads of AddForce.

AddForce(Vector3 [, ForceMode])

and

AddForce(float, float, float [, ForceMode])

where the ForceMode is optional for both.

You are passing in only one single parameter float so the compiler thinks you want to use the first overload and tries in vain to convert the given float into a Vector3 and obviously doesn’t find any implemented way to do such thing.

You probably rather want

rb.AddForce(Vector3.right * 500 * Time.deltaTime);

or

rb.AddForce(500 * Time.deltaTime, 0, 0);

answered Mar 1, 2022 at 6:13

derHugo's user avatar

derHugoderHugo

83.7k9 gold badges77 silver badges115 bronze badges

<pre>using UnityEngine;
using System.Collections;

public class Movimento : MonoBehaviour {

    public Animator Animacao; 

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
         Animacao = gameObject.GetComponent<Animator> ();  
         if (Input.GetAxisRaw ("A") == 1) {
             Animacao.SetBool ("Andar(a)", true);
             gameObject.transform.Translate(new Vector2(-0.1, 0f));
         }
         if (Input.GetAxisRaw ("A") == 0) {
             Animacao.SetBool ("Andar(a)", false);
         }

    }
}

Hi, can you help me with my error? Its in Unity, and the app to i program its VisualStudio (VS Code).

The full error is: Assets\Movimento.cs(18,57): error CS1503: Argument 1: cannot convert from ‘double’ to ‘float’

Help-me pls!!!

What I have tried:

I searched for videos on youtube and searched on google but none helped me, I also tried to change the code but it was not

using System;
using UnityEngine;
using UnityEngine.InputSystem;

namespace platformer
{

    public class HeroInput : MonoBehaviour
    {
    
        [SerializeField] private Hero _hero;

        private HeroInputAction _inputActions;

        private void Awake()
        {
        _inputActions = new HeroInputAction();
        _inputActions.Hero.HorizontalMovement.performed += OnHorizontalMovement;
        _inputActions.Hero.HorizontalMovement.canceled += OnHorizontalMovement;

        _inputActions.Hero.SaySomething.performed += OnSaySomething;
        }

        private void OnEnable() 
        {
        _inputActions.Enable();
        }
        
    

        private void OnHorizontalMovement(InputAction.CallbackContext context )
        {
        var direction = context.ReadValue<float>();
        _hero.SetDirection(direction);
        
        }

        private void OnSaySomething(InputAction.CallbackContext context)
        {
          
        _hero.SaySomething();
        
        }   
    }
}

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

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
данных мало

qaa-engineer.ru > Вопросы и ответы > error CS1503: Argument 1 : cannot convert from ‘method group’ to ‘strint’ помогите пж юнити

Error CS1503 является типичной проблемой, с которой сталкиваются многие разработчики в Unity. В данной статье мы подробно рассмотрим данную ошибку и предоставим вам решение.

Ошибка CS1503 возникает, когда пытаетесь присвоить переменной типа string значение, которое является группой методов (method group). Эта ошибка указывает на несоответствие типов данных и может возникнуть, когда вы пытаетесь передать метод со своими аргументами вместо строки.

Для начала разберемся, что такое method group.

Method group представляет собой набор методов с одинаковым именем, но разными аргументами, которые могут быть вызваны. В C# вы можете вызывать метод в виде делегата, указывая только имя метода без аргументов. В этом случае компилятор будет искать метод с соответствующим именем и аргументами, и выполнит его.

Однако, если вы пытаетесь присвоить метод группе переменных типа string, которая предназначена только для строк, возникает ошибка CS1503.

Рассмотрим пример кода, который может вызвать данную ошибку:

public class MyClass
{
    public void MyMethod(string arg)
    {
        Console.WriteLine(arg);
    }
}

public class AnotherClass
{
    public static void Main(string[] args)
    {
        MyClass myObj = new MyClass();
        
        string myString = myObj.MyMethod; //Ошибка CS1503
    }
}

Здесь мы имеем класс `MyClass`, который содержит метод `MyMethod`, принимающий аргумент типа string и выводящий его на консоль.

В классе `AnotherClass` создаем экземпляр класса `MyClass` и пытаемся присвоить значение метода `MyMethod` переменной `myString`. Компилятор сообщает об ошибке CS1503, так как метод `MyMethod` является методом, а не строкой.

Чтобы исправить эту ошибку, вам нужно вызвать метод `MyMethod` и присвоить его результат переменной `myString`. Для этого воспользуемся делегатами:

public delegate void MyDelegate(string arg);

public class MyClass
{
    public void MyMethod(string arg)
    {
        Console.WriteLine(arg);
    }
}

public class AnotherClass
{
    public static void Main(string[] args)
    {
        MyClass myObj = new MyClass();
        
        MyDelegate myDelegate = new MyDelegate(myObj.MyMethod); //Создаем делегат
        myDelegate("Hello, world!"); //Вызываем делегат
        
        string myString = myDelegate("Hello, universe!"); //Присваиваем результат делегата переменной
    }
}

В данном примере мы создаем делегат `MyDelegate`, который принимает аргумент типа string. Затем мы создаем экземпляр класса `MyClass` и инициализируем делегат `myDelegate` с помощью метода `MyMethod`.

Далее мы вызываем `myDelegate` с аргументом «Hello, world!» и присваиваем результат переменной `myString`. Теперь переменная `myString` содержит значение, возвращенное методом `MyMethod`.

Таким образом, мы решаем проблему ошибки CS1503, приводя метод к делегату и вызывая его для получения значения.

В заключение, ошибка CS1503: «Argument 1 : cannot convert from ‘method group’ to ‘string'» в Unity возникает, когда пытаетесь присвоить переменной типа string значение, которое является группой методов. Одним из способов решения данной ошибки является создание делегата и инициализация его методом. Надеемся, что данная статья помогла вам разобраться в проблеме и найти решение для вашего проекта в Unity.

Понравилась статья? Поделить с друзьями:
  • Ошибка csc 7200029 при оплате на алиэкспресс
  • Ошибка cvc карты сбербанка отказ что это значит
  • Ошибка cs1513 unity
  • Ошибка curl url malformed 3
  • Ошибка cs1061 unity