C# 不跟随父母的子女
我正在制作一个口袋妖怪克隆。 这是一个自上而下的基于分片的rpg 所以我在播放器上添加了4个游戏对象。向上、向下、向左、向右呼叫。 我把它们放在球员周围。我使用这个设置来检查游戏对象是否正常运行。他站在水上。如果这是真的,那么玩家就不能上去了。这是我为碰撞而做的工作。然而,我的孩子们不想跟随我的父母。我所做的只是将4个for gameobjects拖到播放器上,并添加了以下c#脚本:C# 不跟随父母的子女,c#,unity3d,2d,C#,Unity3d,2d,我正在制作一个口袋妖怪克隆。 这是一个自上而下的基于分片的rpg 所以我在播放器上添加了4个游戏对象。向上、向下、向左、向右呼叫。 我把它们放在球员周围。我使用这个设置来检查游戏对象是否正常运行。他站在水上。如果这是真的,那么玩家就不能上去了。这是我为碰撞而做的工作。然而,我的孩子们不想跟随我的父母。我所做的只是将4个for gameobjects拖到播放器上,并添加了以下c#脚本: 使用UnityEngine; 使用系统集合; 公共类玩家控制器:单行为 { 公共层屏蔽底层; 矢量2起始点; 向
使用UnityEngine;
使用系统集合;
公共类玩家控制器:单行为
{
公共层屏蔽底层;
矢量2起始点;
向量2端点;
私人浮动增量;
布尔·伊斯莫温;
公众浮标速度;
公共tk2dTileMap tilemap;
公开游戏对象;
公开游戏对象关闭;
公共游戏对象左;
公共游戏客体权利;
void Start()
{
startPoint=transform.position;
端点=transform.position;
}
无效更新()
{
如果(增量您正在脚本中创建与您在编辑器中创建的对象无关的新游戏对象(向上
,向下
,等等)。有两种解决方案:
1) 您需要将向上
、向下
等分配给在编辑器中创建的游戏对象
。您可以通过编辑开始
方法来完成此操作,方法包括:
up = GameObject.Find( "up" );
down = GameObject.Find( "down" );
// etc.
将“up”
替换为编辑器中命名的up
游戏对象
2) 将向上
、向下
等作为子对象分配给父对象游戏对象
up.transform.parent = parentGameObject.transform;
down.transform.parent = parentGameObject.transform;
// etc.
请注意,如果按此路线执行,则将不会使用在编辑器中创建的向上
、向下
等对象。您还需要翻译新对象(在设置其父对象后),否则它们将仅位于相对于父对象的(0,0,0)
根据评论进行编辑
如果我对问题的理解正确,那么在编辑器中将向上
、向下
等对象作为子对象添加时,您似乎犯了一个错误。只需将它们全部拖动到同一级别的父对象上即可:
然后,每当TestParent
对象移动时,其他对象都会停留在与父对象相同的相对位置,因此也会移动。如果将GameObjects
添加到脚本中,如下所示:
您可以单独移动对象(同时仍然相对于父对象)每秒一个单位。向下
对象也会以每秒额外一个单位的速度向上移动。这会导致父测试
,向上
,左
,右
保持队形,每秒向上移动一个单位,而向下
则以每秒两个单位的速度移动并缓慢地经过它们
using UnityEngine;
using System.Collections;
public class DeleteMe : MonoBehaviour
{
public GameObject Up;
public GameObject Down;
public GameObject Left;
public GameObject Right;
void Start( )
{
}
// Update is called once per frame
void Update( )
{
Move( gameObject );
Move( Down );
}
private void Move( GameObject obj )
{
Vector3 position = obj.transform.position;
position.y += UnityEngine.Time.deltaTime;
obj.transform.position = position;
}
}
开始时的屏幕截图:
过了一段时间后的另一次:
最后请注意,您不需要在脚本中包含public
GameObject
s,然后将它们拖放到脚本上即可访问子脚本。通过将脚本修改为:
private GameObject Up;
private GameObject Down;
private GameObject Left;
private GameObject Right;
void Start( )
{
Up = transform.Find( "Up" ).gameObject;
Down = transform.Find( "Down" ).gameObject;
Left = transform.Find( "Left" ).gameObject;
Right = transform.Find( "Right" ).gameObject;
}
这避免了必须拖放到脚本本身的繁琐性质,还允许您访问可能会动态添加到父级的子级,因此无法拖放
希望这有帮助!通过公开它们,我可以在编辑器中将游戏对象拖到脚本中。而且我还将游戏对象拖到了玩家身上,这样他们就应该是孩子了?我没有机会准确地测试该方法,但当我有机会这样做时会更新。谢谢你的努力。谢谢你。非常感谢。你所做的一切都是为了一个公共属性,您将看到添加脚本的新字段。只需将游戏对象从层次结构拖到空字段中即可。关于父子关系,只需将一个游戏对象拖到另一个上即可。@NullReference如果新信息有任何帮助,请告诉我
private GameObject Up;
private GameObject Down;
private GameObject Left;
private GameObject Right;
void Start( )
{
Up = transform.Find( "Up" ).gameObject;
Down = transform.Find( "Down" ).gameObject;
Left = transform.Find( "Left" ).gameObject;
Right = transform.Find( "Right" ).gameObject;
}