【问题标题】:How to fix cannot convert from 'float' to 'UnityEngine.Vector2'如何修复无法从 \'float\' 转换为 \'UnityEngine.Vector2\'
【发布时间】:2023-02-02 18:10:30
【问题描述】:

在 vs 代码中,我收到此错误“参数 2:无法从‘float’转换为‘UnityEngine.Vector2’[Assembly-CSharp]csharp(CS1503)”。

这是出现错误的代码:

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

public class HF_001 : MonoBehaviour
{
    
    public enum ForceType { Repulsion = -1, None = 0, Attraction = 1 }
    public ForceType m_Type;
    public Transform m_Pivot;
    public float m_Radius;
    public float m_StopRadius;
    public float m_Force;
    public LayerMask m_Layers;

    
    
    private void FixedUpdate()
    {
        Collider2D[] colliders = Physics2D.OverlapArea(m_Pivot.position, m_Radius, m_Layers);

        float signal = (float)m_Type;

        foreach (var collider in colliders)
        {
            Rigidbody2D body = collider.GetComponent<Rigidbody2D>();
            if (body == null) 
                continue;

            Vector2 direction = m_Pivot.position - body.position;

            float distance = direction.magnitude;

            direction = direction.normalized;

            if (distance < m_StopRadius) 
                continue;

            float forceRate = (m_Force / distance);

            body.AddForce(direction * (forceRate / body.mass) * signal);
        }
    }
}

我尝试更改变量“m_Radius”的类型

【问题讨论】:

  • OverlapArea 使用矩形,因此需要两个点。也许 OverlapCircle 是您要找的?

标签: c# unity3d game-engine game-development unityscript


【解决方案1】:

根据 Physics2D.OverlapArea 上的官方文件。它采用第二个参数 Vector2 而不是浮点值。

在上面的代码中,public float m_Radius; 是 float 类型,但需要是 Vector2

Physics2D.OverlapArea 用于检查 Collider 是否落在矩形区域内,如果您需要使用 Radius 而不是点,请查看 Physics2D.OverlapCircle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多