碰撞时将一个游戏对象附加到另一个游戏对象
Attach one gameobject to another when they collide
所以我有 2 个游戏对象 Player 和 Puck。
每当玩家接触(碰撞)冰球时,我都希望冰球附着在玩家身上。
到目前为止,我可以让冰球传送到玩家那里,但我不想那样。
我想让冰球附在我小时候放在玩家身上的空游戏对象树懒上。
Here's my code
public class CollisionDetector : MonoBehaviour {
GameObject empty; //declare empty GameObject called "empty"
Vector3 pos; //declare empty Vector3
GameObject player;
public bool collided;
void Start() {
empty = GameObject.Find("holdSlot"); //Appends actual gameobject called "Empty" to our 'empty' variable we recently declared
player = GameObject.Find("Player"); //Appends actual gameobject called "Player" to our 'player' variable we recently declared
collided = false;
pos = empty.transform.position; //ettii holdSlotin paikan ja laittaa sen "pos" nimelle
}
void OnCollisionEnter(Collision col) {
if (col.gameObject.tag == "Player")
{
//Do something on collide
//transform.position = pos;
collided = true;
}
}
void Update() {
if (collided == true)
{
transform.position = pos;
}
}
}
只要让冰球成为玩家的child,这样它就会跟着他们。
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Player")
{
transform.SetParent(col.gameObject.transform, true);
}
}
参数 worldPositionStays
的 true
值确保冰球保持当前世界位置,而其 parent 更改为玩家 object。
或者,如果你想让冰球跳到默认位置,例如在玩家面前,你可以这样做:
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Player")
{
transform.SetParent(col.gameObject.transform, false);
transform.localPosition = SomeDefaultPositionInPlayersLocalSpace;
}
}
请注意,这两种解决方案都不需要您在更新期间更新冰球的位置。
一旦您想射击冰球,从而将其与玩家分离,只需执行 transform.SetParent(null, true);
然后自由移动它即可。
所以我有 2 个游戏对象 Player 和 Puck。 每当玩家接触(碰撞)冰球时,我都希望冰球附着在玩家身上。 到目前为止,我可以让冰球传送到玩家那里,但我不想那样。 我想让冰球附在我小时候放在玩家身上的空游戏对象树懒上。
Here's my code
public class CollisionDetector : MonoBehaviour {
GameObject empty; //declare empty GameObject called "empty"
Vector3 pos; //declare empty Vector3
GameObject player;
public bool collided;
void Start() {
empty = GameObject.Find("holdSlot"); //Appends actual gameobject called "Empty" to our 'empty' variable we recently declared
player = GameObject.Find("Player"); //Appends actual gameobject called "Player" to our 'player' variable we recently declared
collided = false;
pos = empty.transform.position; //ettii holdSlotin paikan ja laittaa sen "pos" nimelle
}
void OnCollisionEnter(Collision col) {
if (col.gameObject.tag == "Player")
{
//Do something on collide
//transform.position = pos;
collided = true;
}
}
void Update() {
if (collided == true)
{
transform.position = pos;
}
}
}
只要让冰球成为玩家的child,这样它就会跟着他们。
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Player")
{
transform.SetParent(col.gameObject.transform, true);
}
}
参数 worldPositionStays
的 true
值确保冰球保持当前世界位置,而其 parent 更改为玩家 object。
或者,如果你想让冰球跳到默认位置,例如在玩家面前,你可以这样做:
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Player")
{
transform.SetParent(col.gameObject.transform, false);
transform.localPosition = SomeDefaultPositionInPlayersLocalSpace;
}
}
请注意,这两种解决方案都不需要您在更新期间更新冰球的位置。
一旦您想射击冰球,从而将其与玩家分离,只需执行 transform.SetParent(null, true);
然后自由移动它即可。