C# 如何使用双轴而不是在特定部分生成统一的对象
嗨,我正在制作角色动画/与环境的交互。我在尝试从地面到重力方向的地方产卵不同大小的岩石 我在两个脚本(character_movements_animation.cs和powerUp.cs)中都使用了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
/* 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。您还必须自己定义距离和偏移量。