C# Unity3d特征电机从移动平台上跌落/滑落
目前在我的游戏中实现移动平台,我已经成功地使用开关和案例获得了平台,但是当涉及到将玩家保持在平台上时,要么平台在玩家下方滑动,玩家在平台通过后掉落,要么在平台上升的情况下,玩家从平台上掉落 我知道unity有一个默认的charactermotor,它包含javascript中的脚本,但是我想制作一个更简单的charactermotor,它没有unity提供的1那么复杂 我曾尝试在移动平台脚本中添加家长代码,如下面的1,但没有效果:C# Unity3d特征电机从移动平台上跌落/滑落,c#,unity3d,C#,Unity3d,目前在我的游戏中实现移动平台,我已经成功地使用开关和案例获得了平台,但是当涉及到将玩家保持在平台上时,要么平台在玩家下方滑动,玩家在平台通过后掉落,要么在平台上升的情况下,玩家从平台上掉落 我知道unity有一个默认的charactermotor,它包含javascript中的脚本,但是我想制作一个更简单的charactermotor,它没有unity提供的1那么复杂 我曾尝试在移动平台脚本中添加家长代码,如下面的1,但没有效果: void triggerOnStay(Collider coll
void triggerOnStay(Collider collider)
{
if (collider.tag == "Player")
{
collider.transform.parent = transform.parent;
}
}
void triggerOnLeave(Collider collider)
{
if (collider.tag == "Player")
{
collider.transform.parent = null;
}
}
想知道你们是否有人知道我可以添加什么或做什么,让我的charactermotor能够停留在移动的平台上,无论它们是从左到右还是从上到下
特征电机:
public class CharacterMotor2 : MonoBehaviour {
//Variables
public Transform respawnPoint1;
public Transform respawnPoint2;
public Transform respawnPoint3;
public Transform teleporterPoint1;
public Transform teleporterPoint2;
//public Transform nextLevel;
public float speed;
public float jumpSpeed;
public float gravity;
public Vector3 moveDirection = Vector3.zero;
public float downwardForce;
public float terminalVelocity;
public float leftForce;
public float forwardForce;
public float airSpeed;
void Update()
{
CharacterController controller = GetComponent<CharacterController>();
// is the controller on the ground?
if (controller.isGrounded)
{
//Feed moveDirection with input.
moveDirection = new Vector3 (Input.GetAxis ("Horizontal"), 0, Input.GetAxis ("Vertical"));
moveDirection = transform.TransformDirection (moveDirection);
downwardForce = 0;
//Multiply it by speed.
moveDirection *= speed;
//Jumping
if (Input.GetButton ("Jump"))
{
downwardForce -= jumpSpeed;
}
}
else
{
if (downwardForce < terminalVelocity)
{
moveDirection *= airSpeed;
downwardForce += gravity * Time.deltaTime;
}
}
//Applying gravity to the controller
moveDirection.y -= downwardForce * Time.deltaTime;
//Making the character move
controller.Move(moveDirection * Time.deltaTime);
}
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "smallTrampoline")
{
downwardForce *= -1 * collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
}
if (collider.tag == "largeTrampoline")
{
downwardForce *= -2 * collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
}
if (collider.tag == "leftTrampoline")
{
downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
}
if (collider.tag == "rightTrampoline")
{
downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
}
if (collider.tag == "forwardTrampoline")
{
downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
}
if (collider.tag == "backwardTrampoline")
{
downwardForce *= -1 *collider.gameObject.transform.GetComponent<SmallTrampolineBounce> ().jumpSpeed;
}
if (collider.tag == "Respawn")
{
transform.position = respawnPoint1.position;
}
if (collider.tag == "NextRespawn")
{
transform.position = respawnPoint2.position;
}
if (collider.tag == "FinalRespawn")
{
transform.position = respawnPoint3.position;
}
if (collider.tag == "Teleporter")
{
transform.position = teleporterPoint1.position;
}
if (collider.tag == "2ndTeleporter")
{
transform.position = teleporterPoint2.position;
}
if (collider.tag == "NextLevel")
{
Application.LoadLevel(1);
}
公共类CharacterMotor2:单一行为{
//变数
公共交通换气点1;
公共交通换乘点2;
公共交通换气点3;
公共转换传送点1;
公共转换传送点2;
//下一级公共改革;
公众浮标速度;
公众浮标跳跃速度;
公众浮力;
公共向量3移动方向=向量3.0;
公众下浮力;
公共交通终点站;
公共力量;
公共交通运输队;
公众浮标空速;
无效更新()
{
CharacterController=GetComponent();
//控制器在地面上吗?
if(controller.isground)
{
//输入的进给方向。
moveDirection=新矢量3(Input.GetAxis(“水平”)、0、Input.GetAxis(“垂直”);
moveDirection=transform.TransformDirection(moveDirection);
下压力=0;
//乘以速度。
移动方向*=速度;
//跳跃
if(Input.GetButton(“跳转”))
{
向下力-=跳跃速度;
}
}
其他的
{
if(向下力<终点延伸率)
{
移动方向*=空速;
下向力+=重力*时间增量;
}
}
//向控制器应用重力
moveDirection.y-=向下力*时间增量时间;
//使角色移动
控制器移动(移动方向*时间增量);
}
void ontriggenter(碰撞器-碰撞器)
{
if(collider.tag==“smallTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“largeTrampoline”)
{
下向力*=-2*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“leftTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“rightTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“forwardTrampoline”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“后向蹦床”)
{
下向力*=-1*collider.gameObject.transform.GetComponent().jumpSpeed;
}
if(collider.tag==“重生”)
{
transform.position=respawnPoint1.position;
}
if(collider.tag==“nextrepawn”)
{
transform.position=respawnPoint2.position;
}
if(collider.tag==“FinalRespawn”)
{
transform.position=respawnPoint3.position;
}
if(collider.tag==“传送机”)
{
transform.position=teleporterPoint1.position;
}
if(collider.tag==“2ndTeleporter”)
{
transform.position=teleporterPoint2.position;
}
if(collider.tag==“NextLevel”)
{
应用程序。加载级别(1);
}
当玩家在平台上并落地后,你应该尝试将平台的X、Y和Z速度添加到玩家身上,而不是将角色作为移动平台的子对象。如果玩家站在平台上不动,玩家的速度将与平台匹配,玩家将与平台完全一样移动子对象。这也允许玩家能够在运动的平台上自由移动
查看此答案可获得更深入的解决方案: