Unity Error CS7036:没有给出与所需形式参数对应的参数
Unity Error CS7036: No argument given that corresponds to the required formal parameter
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OblstacleMove : MonoBehaviour
{
public GameObject Obstacle;
public int velocidad;
private int VelocidadRotacion;
public
// Start is called before the first frame update
void Start()
{
velocidad = 3;
}
// Update is called once per frame
void Update()
{
if (gameObject.tag == "Vertical")
{
Obstacle.transform.Rotate(1, 0, 0, Space.Self);
}
if (gameObject.tag == "Horizontal")
{
Obstacle.transform.Rotate(0, 0, 1, Space.Self);
}
if(gameObject.tag == "Cube")
{
transform.Translate(new Vector2(velocidad * Time.deltaTime, 0));
ChangeDirection();
}
//Obstacle.transform.Rotate(0, 0, 1, Space.Self);
}
public void ChangeDirection(Collision collision)
{
if(collision.gameObject.tag == "MapLimit")
{
velocidad = velocidad * -1;
}
}
}
我收到这个错误:
Assets\Scripts\OblstacleMove.cs(30,13):错误 CS7036:没有给定的参数对应于 'OblstacleMove.CambioDireccion(Collision)'
的必需形式参数 'collision'
我试过了
if(gameObject.tag == "Cube")
{
transform.Translate(new Vector2(velocidad * Time.deltaTime, 0));
CambioDireccion(Collision collision);
}
没用,我也试过了
private void ChangeDirection(Collision collision)
{
if(collision.gameObject.tag == "MapLimit")
{
velocidad = velocidad * -1;
}
}
我不知道还能尝试什么
如果您声明一个方法接受 1 个参数:
private void CambioDireccion(Collision collision)
^^^^^^^^^^^^^^^^^^^
1 parameter, of type Collision
调用时必须提供 1 个参数(参数值)。你不能像你所做的那样用 0 个参数调用它:
CambioDireccion();
^^
0 arguments provided
要么在调用它时提供 1 个参数,要么修改方法以接受 0 个参数,或者将参数更改为可选参数以便可以使用 0 个或 1 个参数调用它:
CambioDireccion(...); //calling the method providing an argument. Replace ... with some relevant instance of a Collision object. This is the most likely resolution
private void CambioDireccion(){ //modify the method to accept 0 parameters. This will likely fail because the method body uses the passed-in argument
private void CambioDireccion(Collision collision = ...) //modify the method so the parameter is optional; provide a sensible default in place of `...`. Often this is `null`. The method body would have to be modified in some way to work for the case where the optional element was leveraged; perhaps checking for null and responding differently
您必须从这些选项中决定最合乎逻辑的行动方案。它可能会提供一个 Collision 对象,例如:
Collision c = ... //get a Collision from somewhere or make one
CambioDireccion(c);
当你调用一个方法并提供参数时,你不指定类型,只是指定类型的变量名称,或者 returns 类型实例的方法名称,或者调用一个新的类型(可能包括 属性 初始值设定项):
CambioDireccion(variableThatIsACollision);
CambioDireccion(MethodThatReturnsACollision());
CambioDireccion(new Collision());
CambioDireccion(new Collision() { Prop1 = Value1, Prop2 = Value2 });
只需删除“ChangeDirection();”从 Update 并将其名称更改为“OnCollisionEnter”,这些名称很重要,因为这些是在游戏中发生某些事情时调用的 Unity 消息。所以基本上你想等待 CollisionEnter 消息,然后检查标签并改变方向。 (在 VS 中按 Ctrl + Shift + M 可查看所有可用消息)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OblstacleMove : MonoBehaviour
{
public GameObject Obstacle;
public int velocidad;
private int VelocidadRotacion;
public
// Start is called before the first frame update
void Start()
{
velocidad = 3;
}
// Update is called once per frame
void Update()
{
if (gameObject.tag == "Vertical")
{
Obstacle.transform.Rotate(1, 0, 0, Space.Self);
}
if (gameObject.tag == "Horizontal")
{
Obstacle.transform.Rotate(0, 0, 1, Space.Self);
}
if(gameObject.tag == "Cube")
{
transform.Translate(new Vector2(velocidad * Time.deltaTime, 0));
ChangeDirection();
}
//Obstacle.transform.Rotate(0, 0, 1, Space.Self);
}
public void ChangeDirection(Collision collision)
{
if(collision.gameObject.tag == "MapLimit")
{
velocidad = velocidad * -1;
}
}
}
我收到这个错误:
Assets\Scripts\OblstacleMove.cs(30,13):错误 CS7036:没有给定的参数对应于 'OblstacleMove.CambioDireccion(Collision)'
的必需形式参数 'collision'我试过了
if(gameObject.tag == "Cube")
{
transform.Translate(new Vector2(velocidad * Time.deltaTime, 0));
CambioDireccion(Collision collision);
}
没用,我也试过了
private void ChangeDirection(Collision collision)
{
if(collision.gameObject.tag == "MapLimit")
{
velocidad = velocidad * -1;
}
}
我不知道还能尝试什么
如果您声明一个方法接受 1 个参数:
private void CambioDireccion(Collision collision)
^^^^^^^^^^^^^^^^^^^
1 parameter, of type Collision
调用时必须提供 1 个参数(参数值)。你不能像你所做的那样用 0 个参数调用它:
CambioDireccion();
^^
0 arguments provided
要么在调用它时提供 1 个参数,要么修改方法以接受 0 个参数,或者将参数更改为可选参数以便可以使用 0 个或 1 个参数调用它:
CambioDireccion(...); //calling the method providing an argument. Replace ... with some relevant instance of a Collision object. This is the most likely resolution
private void CambioDireccion(){ //modify the method to accept 0 parameters. This will likely fail because the method body uses the passed-in argument
private void CambioDireccion(Collision collision = ...) //modify the method so the parameter is optional; provide a sensible default in place of `...`. Often this is `null`. The method body would have to be modified in some way to work for the case where the optional element was leveraged; perhaps checking for null and responding differently
您必须从这些选项中决定最合乎逻辑的行动方案。它可能会提供一个 Collision 对象,例如:
Collision c = ... //get a Collision from somewhere or make one
CambioDireccion(c);
当你调用一个方法并提供参数时,你不指定类型,只是指定类型的变量名称,或者 returns 类型实例的方法名称,或者调用一个新的类型(可能包括 属性 初始值设定项):
CambioDireccion(variableThatIsACollision);
CambioDireccion(MethodThatReturnsACollision());
CambioDireccion(new Collision());
CambioDireccion(new Collision() { Prop1 = Value1, Prop2 = Value2 });
只需删除“ChangeDirection();”从 Update 并将其名称更改为“OnCollisionEnter”,这些名称很重要,因为这些是在游戏中发生某些事情时调用的 Unity 消息。所以基本上你想等待 CollisionEnter 消息,然后检查标签并改变方向。 (在 VS 中按 Ctrl + Shift + M 可查看所有可用消息)