【问题标题】:Moving objects into random places by using functions使用函数将对象移动到随机位置
【发布时间】:2021-12-31 06:46:23
【问题描述】:

我正在编写将对象移动到随机位置的代码。 我做了一个函数来决定随机坐标并返回它。 但是,我认为功能并没有连接在一起。 这是我尝试过的......

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

public class Movement : MonoBehaviour
{

    public float speed;

    Vector3 target;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 target = random(target);
        transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime * speed);
    }

    Vector3 random(Vector3 target)
    {
        float min = -100.0f;
        float max = 100.0f;
        float randomX = Random.Range(min, max);
        float randomZ = Random.Range(min, max);
        Vector3 target = new Vector3(randomX, 10.0f, randomZ);

        return target;
    }

}

这是我收到的错误消息。

Assets\Movement.cs(31,17): error CS0136: A local or parameter named 'target' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter

我该如何解决这个问题?

【问题讨论】:

  • 请将代码发布为 文本 而不是图像。还要说明您所看到的与您期望看到的,以及您为诊断问题所做的工作(例如,如果您在调试器中运行代码会发生什么)。
  • 您遇到的具体问题是什么?运行代码或错误的结果是什么?
  • 老实说,你很可能不想在每一帧都定义一个新的移动方向......

标签: c# visual-studio function unity3d random


【解决方案1】:

问题是您在随机方法中定义了一个新的target 变量。您之前已将其定义为方法体中的参数。换一个。

【讨论】:

    【解决方案2】:

    这不是统一的问题,而是编译器的问题。

    random(Vector3 target)void Update() 方法中,您正在定义新的“目标" 像这样的变量:

    Vector3 target
    

    所以编译器告诉你这是不允许的。如果要更新目标变量,请删除前面的“Vector3”或选择一个新名称。

    目前尚不清楚这个函数是如何工作的,但我认为最好在开始时声明目标或将其声明为 public,以便您可以为其分配开始位置。

    我认为你想要的是这样的:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Movement : MonoBehaviour
    {
    
        public float speed;
    
        // OPTIONAL: declare public so the editor will let you set a position
        public Vector3 target;
    
        // Start is called before the first frame update
        void Start()
        {
            // OPTIONAL: you can set a start position
            target = Vector3.zero;
        }
    
        // Update is called once per frame
        void Update()
        {
            target = random(target);
            transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime * speed);
        }
    
        Vector3 random(Vector3 par)
        {
            float min = -100.0f;
            float max = 100.0f;
            float randomX = Random.Range(min, max);
            float randomZ = Random.Range(min, max);
            return new Vector3(randomX, 10.0f, randomZ);
        }
    

    编辑:您现在并不需要“随机”函数的参数。所以也许你可以删除它

    【讨论】:

      【解决方案3】:

      您收到此错误的原因是因为您已经将 Vector3 target 声明为 randomupdate 方法之外的类成员。

      如果您来自 JavaScript 之类的语言,您可以通过在内部范围内声明相同的 var 变量名来做到这一点,但在 C# 中这是不可能的。

      【讨论】:

        猜你喜欢
        • 2017-03-26
        • 1970-01-01
        • 2014-03-20
        • 1970-01-01
        • 2017-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-17
        相关资源
        最近更新 更多