我试图创建一个随机范围,但是Unity给我这个错误: UnityException: Vector3不允许从MonoBehaviour构造函数(或实例字段初始化器)中调用,而是在唤醒或启动中调用它。从MonoBehavior调用,名为'particleMover‘。这是我的代码:
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using UnityEngine;
public class particleMover : MonoBehaviour
{
public float moveSpeed;
public float temperature;
public Rigidbody rb;
public Transform tf;
static private float[] directions;
// Start is called before the first frame
void Start()
{
System.Random rnd = new System.Random();
float[] directions = { rnd.Next(1, 360), rnd.Next(1, 360), rnd.Next(1, 360) };
}
// Update is called once per frame
void Update()
{
Vector3 direction = new Vector3(directions[0], directions[1], directions[2]);
direction = moveSpeed * direction;
rb.MovePosition(rb.position + direction);
}
}
发布于 2020-12-11 00:39:20
Vector3 direction = Random.insideUnitSphere;
你使用了(1,360),看起来你把方向和旋转搞混了。
Vector3(x,y,z) - x,y,z是位置值,而不是角度。
此外,您还需要使用Time.deltaTime
direction = moveSpeed * direction * Time.deltaTime;
更多信息:https://docs.unity3d.com/ScriptReference/Time-deltaTime.html
更新答案:
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using UnityEngine;
public class particleMover : MonoBehaviour
{
public float moveSpeed;
public float temperature;
public Rigidbody rb;
public Transform tf;
private Vector3 direction = Vector3.zero;
void Start()
{
direction = Random.insideUnitSphere;
}
void Update()
{
rf.position += direction * moveSpeed * Time.deltaTime;
// If this script is attached to tf object
// transform.position += direction * moveSpeed * Time.deltaTime;
}
}
https://stackoverflow.com/questions/65238605
复制相似问题