Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用双轴而不是在特定部分生成统一的对象_C#_Object_Unity3d_Gravity_Spawning - Fatal编程技术网

C# 如何使用双轴而不是在特定部分生成统一的对象

C# 如何使用双轴而不是在特定部分生成统一的对象,c#,object,unity3d,gravity,spawning,C#,Object,Unity3d,Gravity,Spawning,嗨,我正在制作角色动画/与环境的交互。我在尝试从地面到重力方向的地方产卵不同大小的岩石 我在两个脚本(character_movements_animation.cs和powerUp.cs)中都使用了c语言 我的问题是如何在角色周围而不是通过角色生成对象。 我使用下面的代码: /* Variables Declaration */ public GameObject rock_Small; public GameObject rock_Medium; public GameObject rock

嗨,我正在制作角色动画/与环境的交互。我在尝试从地面到重力方向的地方产卵不同大小的岩石

我在两个脚本(character_movements_animation.cs和powerUp.cs)中都使用了c语言

我的问题是如何在角色周围而不是通过角色生成对象。 我使用下面的代码:

/* Variables Declaration */
public GameObject rock_Small;
public GameObject rock_Medium;
public GameObject rock_Large;

private float posX, posY, posZ;
private bool checkPos = false;
//Use this for initialization
void Start() {
    //Empty for now
}

// Update is called once per frame
void Update() {

    if (Random.Range(0, 100) < 10) {

        checkPos = false;
        posX = this.transform.position.x + Random.Range(-5.0f, 5.0f);
        posY = this.transform.position.y;
        posZ = this.transform.position.z + Random.Range(-5.0f, 5.0f);

        if(posX > 3f && posY > 3f){
            checkPos = true;
        }

        if (checkPos == true) {

            Vector3 newPos = new Vector3(posX, posY, posZ);
            Instantiate(rock_Small, newPos, rock_Small.transform.rotation);
        }

    }
}
/*变量声明*/
公共游戏对象rock_Small;
公开游戏对象rock_媒体;
公众游戏对象摇滚乐;
私人浮动posX、posY、posZ;
私人bool checkPos=假;
//用于初始化
void Start(){
//暂时空着
}
//每帧调用一次更新
无效更新(){
if(随机范围(01100)<10){
checkPos=false;
posX=此.transform.position.x+随机范围(-5.0f,5.0f);
posY=this.transform.position.y;
posZ=这个.transform.position.z+随机范围(-5.0f,5.0f);
if(posX>3f&&posY>3f){
checkPos=true;
}
if(checkPos==true){
Vector3 newPos=新的Vector3(posX、posY、posZ);
实例化(rock_Small、newPos、rock_Small.transform.rotation);
}
}
}
另请参见图中的示例。

看起来您希望在角色周围生成对象,但要避免角色自己的体积

我建议这样做:

var pos = this.transform.position = Random.insideUnitCircle.normlaized * _distance; //how far away from your character. 1, based on your original code
这将为你的角色创建一个戒指。如果要进一步随机化,可以对此值应用较小的随机偏移,例如:

var pos = this.transform.position = Random.insideUnitCircle.normlaized * _distance;
pos += Random.insideUnitCircle * _offset; //how wide the ring should be. 0.1 is probably sufficient.

你说的“通过它”是什么意思?你也可以考虑一个协同程序来做产卵。每一帧都编写代码是非常低效的。我为您更新了我的问题。我想要实现的是,当我繁殖我选择的所有对象时,我希望它们开始从地面升起。但是,我不想让图中显示的任何一块石头穿过我的角色请记住,
Random.InsideUnitIcircle
可以返回(0,0),如果您尝试对其进行规格化,Unity将不起作用:
Vector2.zero.normalized==Vector2.zero
。“这是一个很小的机会,但它是可以发生的。”洛伊佐斯瓦西莱奥说,转换成C#很容易。用适当的类型替换
var
<在这种情况下,代码>矢量3。您还必须自己定义距离和偏移量。