Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “如何拥有球员”;幻灯片“;在管道和轨道上?_C#_Unity3d_Game Physics - Fatal编程技术网

C# “如何拥有球员”;幻灯片“;在管道和轨道上?

C# “如何拥有球员”;幻灯片“;在管道和轨道上?,c#,unity3d,game-physics,C#,Unity3d,Game Physics,我需要创建一个滑动或滑动效果。我想在sunset overdrive中创建滑动或滑动效果: 当主角在电缆和轨道上滑倒时。如何创建相同的结果?在C#中。看这个视频:(从1.20分钟到1.25分钟)。我已创建此代码:-OnTrigger-(适用于电缆) 使用UnityEngine;使用系统集合;公共课 OnTriggerInterscroll:单行为{ /*ISTRUZIONI : Inserire questo Script all'interno dell'Elemento che entr

我需要创建一个滑动或滑动效果。我想在sunset overdrive中创建滑动或滑动效果:

当主角在电缆和轨道上滑倒时。如何创建相同的结果?在C#中。看这个视频:(从1.20分钟到1.25分钟)。我已创建此代码:-OnTrigger-(适用于电缆)

使用UnityEngine;使用系统集合;公共课 OnTriggerInterscroll:单行为{

/*ISTRUZIONI : Inserire questo Script all'interno dell'Elemento che entra in contatto con il Trigger */

public Transform target; // Player
AutoMove AutoMoveScript; // richiamo variabili Script AutoMove

// Use this for initialization
void Start () {
    AutoMoveScript =  target.GetComponent<AutoMove>(); // Richiano componente AutoMove
}

// Update is called once per frame
void Update () {
    Vector3 targetDir = target.position - transform.position;
    Debug.Log(targetDir);
}

void OnTriggerEnter(Collider other) { // Quando il player entra nel Trigger
    if(other.collider.name == "MainCharacter"){

            AutoMoveScript.MoveSpeed = 8;  // Cambio variabile di Velocita'
            AutoMoveScript.activeAutoMoveW = true; // Cambio variabile di scorrimento
            AutoMoveScript.activeAutoMoveS = false; // Cambio variabile di scorrimento


    }

}

void OnTriggerStay(Collider other) { // Quando il player e' nel Trigger
    if(other.collider.name == "MainCharacter"){
        if(Input.GetKey(KeyCode.W)){

            AutoMoveScript.activeAutoMoveW = true; // Cambio variabile di scorrimento
            AutoMoveScript.activeAutoMoveS = false; // Cambio variabile di scorrimento

        }

        if(Input.GetKey(KeyCode.S)){

            AutoMoveScript.activeAutoMoveS = true; // Cambio variabile di scorrimento
            AutoMoveScript.activeAutoMoveW = false; // Cambio variabile di scorrimento

        }

    }

}

void OnTriggerExit(Collider other) { // Quando il player esce nel Trigger

    if(other.collider.name == "MainCharacter"){

            AutoMoveScript.MoveSpeed = 8; // Cambio variabile di Velocita'
            AutoMoveScript.activeAutoMoveS = false; // Cambio variabile di scorrimento
            AutoMoveScript.activeAutoMoveW = false; // Cambio variabile di scorrimento

    }

}
}
/*ISTRUZIONI : Inserire questo Script all'interno del Player */

public bool activeAutoMoveW = false; //variabile controllo Forward
public bool activeAutoMoveS = false; //variabile controllo Back

public int MoveSpeed = 8;   //variabile velocità di scorrimento
public bool activeSelect = false; //variabile controllo Select


// Use this for initialization
void Start () {


}

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

    if(activeAutoMoveW == true)
    {
        transform.Translate(Vector3.forward * MoveSpeed * Time.fixedDeltaTime, Space.World); // Scorrimento in avari
    }

    if(activeAutoMoveS == true)
    {
        transform.Translate(Vector3.back * MoveSpeed * Time.fixedDeltaTime, Space.World); // Scorrimento in  dietro
    }

    if(Input.GetKeyDown(KeyCode.Q) && activeSelect == false)
    {
        MoveSpeed = 1; // Cambio variabile di scorrimento
        activeSelect = true;  // Cambio variabile Slect

    }else if(Input.GetKeyDown(KeyCode.Q) && activeSelect == true)
    {
        MoveSpeed = 8; // Cambio variabile di scorrimento
        activeSelect = false; // Cambio variabile Slect

    }

}   }

系统创建了滑动效果,但不了解角色的方向。

如果我理解正确,问题是当你想要滑动时,你不知道前进是什么。在世界空间中使用Vector3.forward的问题与你在示例中所做的一样,就是无论ob如何移动,它始终是同一个方向对象是面向对象的。在对象空间中使用Vector3.forward的问题是,它对整个对象都是一样的,所以如果你有一个像图片中那样的弯曲对象,它也不会工作

你需要一些方法来了解物体是如何弯曲的,一个简单的例子是沿着轨道的一侧手动放置一个矢量3点阵列,然后你可以通过点[i+1]-点[i]来计算方向假设你不总是从铁路的起点出发,你还需要一些方法来找出你在哪两点之间,这可能并不容易

像这样的

public class AutoMove : MonoBehaviour 
{
  public Vector3[] points;
  private int currentIndex = -1;
  ...

  void Update()
  {
    if(activeAutoMoveW == true)
    {
        Vector3 direction = points[i+1]-points[i];
        transform.position += direction * MoveSpeed * Time.fixedDeltaTime;

        if((transform.position - points[i+1]).sqrMagnitude < 0.1f) //check if we are at the next point
            currentIndex++;
    }
    if(activeAutoMoveS == true)
    {
        Vector3 direction = points[i+1]-points[i];
        transform.position -= direction * MoveSpeed * Time.fixedDeltaTime;

        if((transform.position - points[i]).sqrMagnitude < 0.1f) //check if we are at the next point
            currentIndex--;
    }

    if(currentIndex < 0 || currentIndex > points.Length) //check if we are at either edge of the line and then end the slip
    {
        activeAutoMoveW = false;
        activeAutoMoveS = false;
    {

    ...
  }

  public void BeginSlip(Vector3[] points) //called from the object when you want to begin the slip
  {
    this.points = points; //get the slip points from the object you slip on

    //find the closest point
    float minDist = float.MaxValue;
    for(int i=0; i<points.Length; i++)
    {
      float currentDist = (transform.position - points[i]).sqrMagnitude;
      if(currentDist  < minDist)
      {
        minDist = currentDist;
        currentIndex = i;
      }
    }
  }
}
公共类自动移动:单行为
{
公共矢量3[]点;
private int currentIndex=-1;
...
无效更新()
{
if(activeAutoMoveW==true)
{
矢量3方向=点[i+1]-点[i];
transform.position+=方向*移动速度*时间.固定时间;
if((transform.position-points[i+1]).sqrMagnitude<0.1f)//检查我们是否在下一个点
currentIndex++;
}
如果(activeAutoMoveS==true)
{
矢量3方向=点[i+1]-点[i];
transform.position-=方向*移动速度*时间.固定时间;
if((transform.position-points[i]).sqrMagnitude<0.1f)//检查我们是否在下一个点
当前索引--;
}
if(currentIndex<0 | | currentIndex>points.Length)//检查我们是否在线条的任意边缘,然后结束滑动
{
activeAutoMoveW=false;
activeAutoMoveS=false;
{
...
}
public void BeginSlip(Vector3[]points)//在开始滑动时从对象调用
{
this.points=points;//从滑动的对象获取滑动点
//找到最近的点
float minDist=float.MaxValue;

对于(int i=0;看,我理解代码,但如何创建点曲线?如何找到我是哪些点?对于曲线,我认为是“for method”[对于(int i=0;i