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
77.4k9 gold badges67 silver badges105 bronze badges
asked Mar 1, 2022 at 3:44
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
derHugoderHugo
77.4k9 gold badges67 silver badges105 bronze badges
error CS1503: Argument `#1′ cannot convert `UnityEngine.Vector3′ expression to type `UnityEngine.Ray’
I don’t even know what’s going wrong here, the Unity database is super vague and I just don’t know what I’m doing by using t$$anonymous$$s, but I’m having a problem with Spherecast. I’ve tried searc$$anonymous$$ng for answers online, but I couldn’t find an answer that solved my problem.
So t$$anonymous$$s is the ONE line of code that has huge problems, I dont know if I need to supply more code, but if I do, I’d happily provide you with more of the code. Anyway, here goes:
I dont know what is going wrong. I dont know why t$$anonymous$$s error is caused, when it seems like wherever I look, it tells me to give a vector3, w$$anonymous$$ch I am doing.
Some clarification or help would be great, thanks guys, Im just utterly lost on t$$anonymous$$s one
3 Ответов
Ответ от Landern · 19/12/16 17:10
You’re missing the RaycastHit.
The rest of the parameters after the RaycastHit have default parameters but you must supply origin, radius, direction, and $$anonymous$$tinfo parameters.
Ответ от UnityCoach · 19/12/16 17:16
According to the documentation, there are three implementations :
public static bool SphereCast(Vector3 origin, float radius, Vector3 direction, out RaycastHit $$anonymous$$tInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static bool SphereCast(Ray ray, float radius, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
public static bool SphereCast(Ray ray, float radius, out RaycastHit $$anonymous$$tInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
The first one is the only one to take a Vector3. So you need to at least pass it : (Vector3 origin, float radius, Vector3 direction, out RaycastHit $$anonymous$$tInfo)
Источник
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();
}
}
}
Pasho43K 0 / 0 / 0 Регистрация: 26.01.2019 Сообщений: 3 |
||||
1 |
||||
26.01.2019, 17:34. Показов 4691. Ответов 5 Метки нет (Все метки)
Помогите с ошибкой в коде C#, писал для игры на Unity, в консоли вышла ошибка: «AssetsScriptsPlayerController.cs(63,60): error CS1503: Argument 2: cannot convert from ‘method group’ to ‘float'».
__________________
0 |
Администратор 15248 / 12287 / 4904 Регистрация: 17.03.2014 Сообщений: 24,884 Записей в блоге: 1 |
|
26.01.2019, 17:45 |
2 |
Pasho43K, в 63 строке идет обращение к методу Jump без скобок — то есть это не вызов метода и так можно делать только в контексте делегатов. Кроме того метод Jump ничего не возвращает, в то время как конструктор Vector2 очевидно ожидает float. Как исправить ошибку тебе должно быть виднее.
0 |
Pasho43K 0 / 0 / 0 Регистрация: 26.01.2019 Сообщений: 3 |
||||
26.01.2019, 18:33 [ТС] |
3 |
|||
Дело в том, что при «public float Jump» для этого кода начинает выдавать ошибку второй код, который к привязан к первому. в 16 строке он ругается на Jump, т.к. он неназываемый член, который не может использоваться как метод. При этом программа предлагает создать метод PlayerController.Jump, при его создании он начинает ругаться на то, что тип PlayerController уже содержит определение для Jump(имеется ввиду «public float Jump»). Честно говоря не очень понимаю как это исправить. Это второй код, который выдает ошибку в 16 строке —
0 |
489 / 285 / 129 Регистрация: 30.10.2018 Сообщений: 1,309 |
|
26.01.2019, 18:48 |
4 |
Pasho43K, в первом коде ты ожидаешь от метода Jump float, во втором ты хочешь что бы этот метод делал прыжок, ты определись.
0 |
0 / 0 / 0 Регистрация: 26.01.2019 Сообщений: 3 |
|
26.01.2019, 18:50 [ТС] |
5 |
Я хочу, чтобы при «Input.GetButtonDown(«Jump»)» был Jump.
0 |
489 / 285 / 129 Регистрация: 30.10.2018 Сообщений: 1,309 |
|
26.01.2019, 19:06 |
6 |
PlRgb.velocity = new Vector2(PlRgb.velocity.x, Jump); эту строки перекинь в метод и вызывай Jump()
0 |
Re: работа Raycast с tag
Макс писал(а):
elf01 писал(а):
Макс писал(а):то тогда она не знает что такое Hashtable
Зачем Hashtable, если в последних моих примерах я заменил Hashtable на словарь?
Понял. ну тогда я пока не знаю как те ошибки можно решить. Но ту строку длинную надо наверн разюить как нить.
- elf01
- UNIверсал
- Сообщения: 370
- Зарегистрирован: 07 июл 2013, 08:59
Re: работа Raycast с tag
elf01 19 июл 2013, 07:44
Эти 4 ошибки аж бесят уже, пробовал объявить там или разбить на несколько, ничего не помогло(
- Код: Выделить всё
error CS1502: The best overloaded method match for `System.Collections.Generic.Dictionary<string,UnityEngine.GameObject>.this[string]' has some invalid arguments
error CS1503: Argument `#1' cannot convert `int' expression to type `string'
error CS1502: The best overloaded method match for `UnityEngine.Object.Destroy(UnityEngine.Object)' has some invalid arguments
error CS1503: Argument `#1' cannot convert `object' expression to type `UnityEngine.Object'
Блин, да из-за этих ошибок у меня теперь даже игра не запускается пока не исправить их.
- elf01
- UNIверсал
- Сообщения: 370
- Зарегистрирован: 07 июл 2013, 08:59
Re: работа Raycast с tag
2rusbekov 19 июл 2013, 08:15
Молодой человек, ну можно же погуглить почитай что такое Дишнэри, что такое Хэштэйбл. Как ими пользоваться.
Используется csharp
using UnityEngine;
using System;
using System.Collections.Generic;
public static class Global
{
public static Dictionary<String, GameObject> GO = new Dictionary<String, GameObject>();
}
public class InstantiateGO : MonoBehaviour {
public Light fonarik;
public GameObject cher;
private GameObject o;
void Awake(){
fonarik.enabled = !fonarik.enabled;
string j;
for(int i = 1; i<= 30; i++){
o = GameObject.Instantiate(cher, new Vector3(Random.Range(100,1000),1,Random.Range(1000,100)),transform.rotation) as GameObject;
j = «cher»+i;
o.name = j;
Global.GO.Add(j, o);
}
if(Input.GetKeyUp(KeyCode.F)) fonaryk.enabled = !fonaryk.enabled;
}
}
Используется csharp
using UnityEngine;
using System.Collections;
using System;
public class Playerr : MonoBehaviour {
private GUIText gText;
private float dist = 5f;
int i;
// Use this for initialization
void Start () {
i=0;
}
void Awake(){
gText = GameObject.Find(«kol cher»).guiText;//делаем ссылку на гуи элемент
}
void Update () {
Ray ray = new Ray(transform.position,transform.forward);
RaycastHit hit;
if(Physics.Raycast(ray,out hit,dist))
{
Collider c = hit.collider;//делаем ссылку на коллайдер
if(c.tag == «chep»)
{
i++;
gText.text=i+«»;
Destroy(Global.GO[c.name]);//удаляем ГО по ссылке из массива
Global.GO.Remove(j);//удаляем ссылку на ГО из массива
}
}
}
}
Still alive…
-
2rusbekov - Адепт
- Сообщения: 1409
- Зарегистрирован: 06 апр 2012, 12:57
- Откуда: Бишкек
Re: работа Raycast с tag
Макс 19 июл 2013, 08:27
Вот тут можно почитать о массивах и словаре:
http://habrahabr.ru/post/142285
И к каждому массиву там есть ссылочка на подробнейшую документацию на русском и с примерами, от msdn.microsoft.com
- Макс
- UNIверсал
- Сообщения: 372
- Зарегистрирован: 20 июн 2013, 23:05
Re: работа Raycast с tag
elf01 19 июл 2013, 09:35
2rusbekov писал(а):Молодой человек, ну можно же погуглить почитай что такое Дишнэри, что такое Хэштэйбл. Как ими пользоваться.
Макс писал(а):Вот тут можно почитать о массивах и словаре:
http://habrahabr.ru/post/142285
И к каждому массиву там есть ссылочка на подробнейшую документацию на русском и с примерами, от msdn.microsoft.com
Спасибо конечно, я почитал. Но тогда я не пойму почему остались ошибки:
- Код: Выделить всё
error CS0103: The name `j' does not exist in the current context
error CS1502: The best overloaded method match for `System.Collections.Generic.Dictionary<string,UnityEngine.GameObject>.Remove(string)' has some invalid arguments
error CS1503: Argument `#1' cannot convert `object' expression to type `string'
Если по документации и по сделаному «вроде» правильно написано.
- elf01
- UNIверсал
- Сообщения: 370
- Зарегистрирован: 07 июл 2013, 08:59
Re: работа Raycast с tag
2rusbekov 19 июл 2013, 09:59
Тут опечатка. Можно же и самому понять. Что j не существует, что напсиано и в ошибке. Её надо заменить на c.name
Используется csharp
Global.GO.Remove(c.name);
Still alive…
-
2rusbekov - Адепт
- Сообщения: 1409
- Зарегистрирован: 06 апр 2012, 12:57
- Откуда: Бишкек
Re: работа Raycast с tag
elf01 19 июл 2013, 10:02
2rusbekov писал(а):
Тут опечатка. Можно же и самому понять. Что j не существует, что напсиано и в ошибке. Её надо заменить на c.name
Используется csharp
Global.GO.Remove(c.name);
да я пробовал менять так но выскочило вот такое:
- Код: Выделить всё
error CS0104: `Random' is an ambiguous reference between `UnityEngine.Random' and `System.Random'
error CS0103: The name `Random' does not exist in the current context
error CS0104: `Random' is an ambiguous reference between `UnityEngine.Random' and `System.Random'
error CS0103: The name `Random' does not exist in the current context
error CS1502: The best overloaded method match for `UnityEngine.Vector3.Vector3(float, float, float)' has some invalid arguments
error CS1503: Argument `#1' cannot convert `object' expression to type `float'
error CS1502: The best overloaded method match for `UnityEngine.Object.Instantiate(UnityEngine.Object, UnityEngine.Vector3, UnityEngine.Quaternion)' has some invalid arguments
error CS1503: Argument `#2' cannot convert `object' expression to type `UnityEngine.Vector3'
error CS0103: The name `fonaryk' does not exist in the current context
error CS0103: The name `fonaryk' does not exist in the current context
- elf01
- UNIверсал
- Сообщения: 370
- Зарегистрирован: 07 июл 2013, 08:59
Re: работа Raycast с tag
2rusbekov 19 июл 2013, 10:12
Выложи оба скрипа полностью
Still alive…
-
2rusbekov - Адепт
- Сообщения: 1409
- Зарегистрирован: 06 апр 2012, 12:57
- Откуда: Бишкек
Re: работа Raycast с tag
Макс 19 июл 2013, 10:27
Не, это жопа… там походу в разных скриптах, ошибка на ошибке, да ещё лог ошибок странный, ни имён ни номеров строк… Ты вообще в Юнити это пытаешся запускать, или в чём? где нормальный, развёрнутый лог ошибок из консоли Юнити?
Если хочешь чему-то научиться, то надо пытаться писать свои скрипты, и пробовать как по отдельности работают различные методы, а не тупо копипастить чужие, нифига в них не понимая.
- Макс
- UNIверсал
- Сообщения: 372
- Зарегистрирован: 20 июн 2013, 23:05
Re: работа Raycast с tag
seaman 19 июл 2013, 11:46
Нужно просто читать ошибки, думать и читать документацию. Больше ничего не надо для решения всех проблем.
Первая ошибка. Random есть в нескольких местах. Это Вам четко написало — error CS0104: `Random’ is an ambiguous reference between `UnityEngine.Random’ and `System.Random’
Прочитали. Думаем. Их несколько, Компилятор сам не может решить какой использовать. Что нужно сделать?- Указать компилятору — какой использовать! Как указывается? Уточняется перед переменной/классом… Т.е. вместо Random нужно использовать UnityEngine.Random. Если он используется во многих местах — это нудно везде менять. Тогда используется using.
Т.е. в начале скрипта пишем:
Используется csharp
using Random = UnityEngine.Random;
Все, — теперь когда компилятор видит Random он понимает что нужно использовать Random из Юнити.
Вторая ошибка. Прочитайте что тут написано: error CS1502: The best overloaded method match for `UnityEngine.Vector3.Vector3(float, float, float)’ has some invalid arguments
И подумайте что это значит. Это Вам домашнее задание.
ЗЫ:
лог ошибок странный
Это ошибки в Моно или VS
- seaman
- Адепт
- Сообщения: 8351
- Зарегистрирован: 24 янв 2011, 12:32
- Откуда: Самара
Re: работа Raycast с tag
elf01 19 июл 2013, 16:37
seaman писал(а):Нужно просто читать ошибки, думать и читать документацию. Больше ничего не надо для решения всех проблем.
Первая ошибка. Random есть в нескольких местах. Это Вам четко написало — error CS0104: `Random’ is an ambiguous reference between `UnityEngine.Random’ and `System.Random’
Прочитали. Думаем. Их несколько, Компилятор сам не может решить какой использовать. Что нужно сделать?- Указать компилятору — какой использовать! Как указывается? Уточняется перед переменной/классом… Т.е. вместо Random нужно использовать UnityEngine.Random. Если он используется во многих местах — это нудно везде менять. Тогда используется using.
Т.е. в начале скрипта пишем:Используется csharp
using Random = UnityEngine.Random;
Все, — теперь когда компилятор видит Random он понимает что нужно использовать Random из Юнити.
Вторая ошибка. Прочитайте что тут написано: error CS1502: The best overloaded method match for `UnityEngine.Vector3.Vector3(float, float, float)’ has some invalid arguments
И подумайте что это значит. Это Вам домашнее задание.
ЗЫ:лог ошибок странный
Это ошибки в Моно или VS
Спасибо. Все ошибки решены.
И все должно роботать ок, только вот когда перетаскиваю скрипт, выскакивает ошибка:
- Код: Выделить всё
Can't add script
Can't add script behaviour fonaryk. The scripts file name does not match the name of the class defined in the script!
Название скрипта и класс совпадают.
Название: fonaryk
А вот скрипт:
Используется csharp
using UnityEngine;
using System;
using System.Collections.Generic;
using Random = UnityEngine.Random;
public static class Global
{
public static Dictionary<String, GameObject> GO = new Dictionary<String, GameObject>();
}
public class InstantiateGO : MonoBehaviour {
public Light fonaryk;
public GameObject cher;
private GameObject o;
void Awake(){
fonaryk.enabled = !fonaryk.enabled;
string j;
for(int i = 1; i<= 30; i++){
o = GameObject.Instantiate(cher, new Vector3(Random.Range(100,1000),1,Random.Range(1000,100)),transform.rotation) as GameObject;
j = «cher»+i;
o.name = j;
Global.GO.Add(j, o);
}
if(Input.GetKeyUp(KeyCode.F)) fonaryk.enabled = !fonaryk.enabled;
}
}
- elf01
- UNIверсал
- Сообщения: 370
- Зарегистрирован: 07 июл 2013, 08:59
Re: работа Raycast с tag
borr 19 июл 2013, 16:42
InstantiateGO ?
- borr
- UNIт
- Сообщения: 112
- Зарегистрирован: 01 мар 2013, 09:15
Re: работа Raycast с tag
elf01 19 июл 2013, 17:09
borr писал(а):InstantiateGO ?
Да, в скрипте ж написано.
- elf01
- UNIверсал
- Сообщения: 370
- Зарегистрирован: 07 июл 2013, 08:59
Re: работа Raycast с tag
seaman 19 июл 2013, 18:13
Название скрипта и класс совпадают.
Название: fonaryk
Тролите?
Что за издевательство!
Скрипт назван fonarik, а судя по Вашему посту класс называется Global! Даже если Вы решили, что не Global, то InstantiateGO. Больше классов просто нет!
Ну что Вы мозги то пудрите!То от одного несколько часов добиваешься, чтобы он посмотрел на тег, то другой утверждает фигню!
Хорош уже!
- seaman
- Адепт
- Сообщения: 8351
- Зарегистрирован: 24 янв 2011, 12:32
- Откуда: Самара
Re: работа Raycast с tag
elf01 19 июл 2013, 18:58
seaman писал(а):
Название скрипта и класс совпадают.
Название: fonarykТролите?
Что за издевательство!
Скрипт назван fonarik, а судя по Вашему посту класс называется Global! Даже если Вы решили, что не Global, то InstantiateGO. Больше классов просто нет!
Ну что Вы мозги то пудрите!То от одного несколько часов добиваешься, чтобы он посмотрел на тег, то другой утверждает фигню!
Хорош уже!
нет скрипт реально называется fonaryk. Прост осначало у меня был js скрипт fonarik. а потом мне помогли чтобы легче было два скрипта на CS и дал название скрипту fonaryk. Могу скрин сделать. для убедительности.
- elf01
- UNIверсал
- Сообщения: 370
- Зарегистрирован: 07 июл 2013, 08:59
Вернуться в Почемучка
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и гости: 31
Add Answer
|
View In TPC Matrix
Technical Problem Cluster First Answered On
June 2, 2021
Popularity
5/10
Helpfulness
10/10
Contributions From The Grepper Developer Community
Contents
Code Examples
Related Problems
TPC Matrix View Full Screen
error cs1503 argument 3 cannot convert from ‘double’ to ‘float’
Comment
3
Popularity
5/10 Helpfulness
10/10
Language
csharp
Source: forum.unity.com
Tags: c#
Contributed on Jun 02 2021
Cooperative Being
5 Answers Avg Quality 9/10