C# 除了控制器脚本传送之外,还有其他移动我的玩家的方法吗

C# 除了控制器脚本传送之外,还有其他移动我的玩家的方法吗,c#,unity3d,2d,game-physics,C#,Unity3d,2d,Game Physics,我想在我的2d平台上做一个弹簧墙。然而,每次我尝试移动我的角色(addforce、transform.translate,甚至尝试使用bouncy naterial)时,都会传送我的角色,而不是移动它。我的控制器脚本不会发生这种情况。我怀疑我的脚本中有什么东西导致了这种交互,但我不确定到底是什么。这是我的控制器脚本。如有任何建议,将不胜感激:)) 使用UnityEngine; 使用系统集合; 公共类控制器:单行为 { //他能跑多快 公众浮子最高速度=15f; bool facingRight=

我想在我的2d平台上做一个弹簧墙。然而,每次我尝试移动我的角色(addforce、transform.translate,甚至尝试使用bouncy naterial)时,都会传送我的角色,而不是移动它。我的控制器脚本不会发生这种情况。我怀疑我的脚本中有什么东西导致了这种交互,但我不确定到底是什么。这是我的控制器脚本。如有任何建议,将不胜感激:))

使用UnityEngine;
使用系统集合;
公共类控制器:单行为
{
//他能跑多快
公众浮子最高速度=15f;
bool facingRight=正确;
//角色所面对的方向是什么
bool-grounded=false;
//检查角色是否接地
公开审查;
//变换用于查看角色是否已触地
浮地半径=0.2f;
//为变换圆创建地面半径以进行地面检测
游戏对象玩家,玩家2;
int字符选择;
//我很确定这个东西^^^是不必要的,是从我在这个脚本中的角色转换开始的,但我不想为了以防万一而删除它
公共浮子力=700f;
//人物的力量
公共游戏对象;
公共层码头;
//地面是哪一层
void Start()
{
characterselect=1;
Player=GameObject.Find(“Player”);
Player2=GameObject.Find(“Player2”);
//将游戏对象作为变量加载我很确定这些东西是不必要的,是从我在脚本中使用角色切换时开始的,但不想为了以防万一而删除
}
void FixedUpdate()
{
//转换是否成功,是否返回真值或假值
接地=物理2D.重叠圆(接地检查位置、接地半径、whatIsGround);
//了解方向
float move=Input.GetAxis(“水平”);
//将速度添加到移动方向乘以速度
GetComponent().velocity=新矢量2(移动*速度上限,GetComponent().velocity.y);
如果(移动>0&&!facingRight)//如果朝向不正确,则使用翻转功能
翻转();
else if(移动<0&&朝向右侧)
翻转();
//整个翻转结果不是必要的,因为我的精灵是对称的
}
无效更新()
{
//如果字符实际接触地面,则当按下空格时,该功能将运行
if(接地&&Input.GetKeyDown(KeyCode.Space))
{
//将跳跃力添加到附着到角色的刚体
GetComponent().AddForce(新矢量2(0,jumpForce));
//实例化(跳跃粒子、transform.position、transform.rotation);
//破坏(粒子,3f);
}
{
//这是我为角色切换而编写的代码,但无法使其正常工作。我没有删除它,因为它花费了我很多时间,并在角色切换脚本中循环使用
//if(Input.GetKeyDown(KeyCode.E))
//  {
//如果(字符选择==1)
//    {
//characterselect=2;
//  }
//else if(characterselect==2)
//   {
//characterselect=1;
//   }
//   }
//如果(字符选择==1)
//  {
//Player.SetActive(true);
//Player2.SetActive(假);
//  }
//else if(characterselect==2)
// {
//Player.SetActive(false);
//Player2.SetActive(真);
// }
}
if(Input.GetKeyDown(KeyCode.LeftShift))
{
最高速度=最高速度*2;
}
else if(Input.GetKeyUp(KeyCode.LeftShift))
{
最高速度=15;
}
}
void flip()
{
//当面对另一个方向时
facingRight=!facingRight;
//加载本地刻度
Vector3 theScale=transform.localScale;
//在x轴上翻转角色
比例x*=-1;
//然后将其应用于局部尺度
transform.localScale=比例;
}
编辑

      using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class boost : MonoBehaviour {
private Rigidbody2D rb2d;

// Use this for initialization
void OnCollisionEnter2D(Collision2D other){
    if (other.gameObject.tag == "booster") {
        Vector2 tempvect = new Vector2 (2, 0);
        rb2d.MovePosition ((Vector2)transform.position + tempvect);
    }


}
void Start () {
    rb2d = GetComponent<Rigidbody2D>();
}

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

}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共阶层的提升:单一行为{
私有刚体2d rb2d;
//用于初始化
空心OnCollisionInter2D(碰撞2D其他){
if(other.gameObject.tag==“booster”){
Vector2 tempvect=新的Vector2(2,0);
rb2d.MovePosition((Vector2)transform.position+tempvect);
}
}
无效开始(){
rb2d=GetComponent();
}
//每帧调用一次更新
无效更新(){
}
}

这是我认为应该使它工作的代码错误来了
rb2d.MovePosition((Vector2)transform.position+tempvect)

使用
Rigidbody2D.MovePosition
。例如,请参阅。这是针对3d的,但您可以轻松地修改2D的答案。如果有问题,请告诉我,但我现在得到了错误:对象引用未设置为对象boost的实例。OnCollisionInter2d双击错误,它会将您带到错误所在的位置。编辑您的问题注意,在下面添加编辑并添加新代码。同时说明错误的来源。不要在注释部分发布代码确定@ProgrammerRigidbody2D必须附加到
boost
脚本附加到的游戏对象,因为没有
GetComponent();
找不到。顺便说一句,我希望您使用我链接的代码移动播放机,将
GetComponent().velocity
替换为
FixedUpdate
函数中的
controller
脚本,但我不知道您现在在做什么。
      using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class boost : MonoBehaviour {
private Rigidbody2D rb2d;

// Use this for initialization
void OnCollisionEnter2D(Collision2D other){
    if (other.gameObject.tag == "booster") {
        Vector2 tempvect = new Vector2 (2, 0);
        rb2d.MovePosition ((Vector2)transform.position + tempvect);
    }


}
void Start () {
    rb2d = GetComponent<Rigidbody2D>();
}

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

}