【问题标题】:Prefab enemy all walk in same random path预制敌人都走在相同的随机路径
【发布时间】:2019-05-07 23:53:40
【问题描述】:

我有一个关于随机在广场内行走的敌人的脚本。我从那个方格中得到一个随机点,并将敌人移向那个随机生成的点。 问题在于,当实例化多个敌人时,它们都在同一个脚本上运行并使用相同的随机生成点,因此它们最终都会朝着同一个方向行走。

我认为 unity 只实例化预制件的副本而不是脚本,因此所有预制件都使用相同的脚本。

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

public class WanderSquare : MonoBehaviour
{
    public Renderer square;
    Vector3 size;
    public int directionChangeInterval;
    static Vector3 direction;
    public float speed;

    void Start()
    {
        size = square.bounds.size;

        StartCoroutine(NewHeading());
    }


    Vector3 NewHeadingRoutine()
    {
        Vector3 position = new Vector3(Random.Range(-size.x/2, size.x/2), 0.3f, Random.Range(-size.z/2, size.z/2));

        return position;
    }
    IEnumerator NewHeading()
    {
        while (true)
        {
            direction=NewHeadingRoutine();
            yield return new WaitForSeconds(directionChangeInterval);
        }
    }
    private void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position,direction,speed/100);


    }
}

【问题讨论】:

    标签: unity3d random instantiation


    【解决方案1】:

    您的direction 是一个静态变量,因此脚本的每个实例都使用相同的方向。每当计算出 direction 的新值时,脚本的每个实例都将开始使用该方向。

    direction 中删除static,它应该可以工作。

    【讨论】:

    • 哇,你是一个角度!我几乎失去了理智,发疯了。喜欢编码,但我也讨厌它,因为像这样的东西啊哈哈 Chears
    • 不客气。我数不清有多少次我花了几个小时或几天试图找出一个问题,却发现这只是我犯的一个小错误。
    • 我放弃了投票,但我没有足够的声誉啊哈哈
    • 当我尝试加入俱乐部时,总是被告知我的声望也不够。
    • 这就是为什么我在 三个不同的答案(针对不同的问题)就在昨天告诉人们不要“只是成功”的原因静态”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    相关资源
    最近更新 更多