Помогите исправить ошибку в скрипте

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Помогите исправить ошибку в скрипте

Сообщение tiundv 25 авг 2011, 16:47

Помогите исправить ошибку в скрипте
(c#)
Синтаксис:
Используется csharp
void  LateUpdate (){

    if (Time.deltaTime == 0 || targetTransform == null || !targetTransform.gameObject.active)

        return;

       

        target = targetTransform.position;

       

    // Remember initial directions of joints that should not be affected

    Vector3[] jointDirections = new Vector3[nonAffectedJoints.Length];

    for (float i=0; i<nonAffectedJoints.Length; i++) {

        for (Transform child in nonAffectedJoints[i].joint) {

            jointDirections[i] = child.position - nonAffectedJoints[i].joint.position;

            break;

        }

    }

   

    // Handle each segment

    foreach(BendingSegment segment in segments) {

        Transform t = segment.lastTransform;

        if (overrideAnimation) {

            for (i=segment.chainLength-1; i>=0; i--) {

                t.localRotation = segment.origRotations[i];

                t = t.parent;

            }

        }



        Quaternion parentRot = segment.firstTransform.parent.rotation;

        Quaternion parentRotInv = Quaternion.Inverse(parentRot);



        // Desired look direction in world space

        Vector3 lookDirWorld = (target - segment.lastTransform.position).normalized;

       

        // Desired look directions in neck parent space

        Vector3 lookDirGoal = (parentRotInv * lookDirWorld);

       

        // Get the horizontal and vertical rotation angle to look at the target

        float hAngle = AngleAroundAxis(

            segment.referenceLookDir, lookDirGoal, segment.referenceUpDir

        );

       

        Vector3 rightOfTarget = Vector3.Cross(segment.referenceUpDir, lookDirGoal);

       

        Vector3 lookDirGoalinHPlane =

            lookDirGoal - Vector3.Project(lookDirGoal, segment.referenceUpDir);

       

        float vAngle  = AngleAroundAxis(

            lookDirGoalinHPlane, lookDirGoal, rightOfTarget

        );

       

        // Handle threshold angle difference, bending multiplier,

        // and max angle difference here

        float hAngleThr = Mathf.Max(

            0, Mathf.Abs(hAngle) - segment.thresholdAngleDifference

        ) * Mathf.Sign(hAngle);

       

        float vAngleThr = Mathf.Max(

            0, Mathf.Abs(vAngle) - segment.thresholdAngleDifference

        ) * Mathf.Sign(vAngle);

       

        hAngle = Mathf.Max(

            Mathf.Abs(hAngleThr) * Mathf.Abs(segment.bendingMultiplier),

            Mathf.Abs(hAngle) - segment.maxAngleDifference

        ) * Mathf.Sign(hAngle) * Mathf.Sign(segment.bendingMultiplier);

       

        vAngle = Mathf.Max(

            Mathf.Abs(vAngleThr) * Mathf.Abs(segment.bendingMultiplier),

            Mathf.Abs(vAngle) - segment.maxAngleDifference

        ) * Mathf.Sign(vAngle) * Mathf.Sign(segment.bendingMultiplier);

       

        // Handle max bending angle here

        hAngle = Mathf.Clamp(hAngle, -segment.maxBendingAngle, segment.maxBendingAngle);

        vAngle = Mathf.Clamp(vAngle, -segment.maxBendingAngle, segment.maxBendingAngle);

       

        Vector3 referenceRightDir =

            Vector3.Cross(segment.referenceUpDir, segment.referenceLookDir);

       

        // Lerp angles

        segment.angleH = Mathf.Lerp(

            segment.angleH, hAngle, Time.deltaTime * segment.responsiveness

        );

        segment.angleV = Mathf.Lerp(

            segment.angleV, vAngle, Time.deltaTime * segment.responsiveness

        );

       

        // Get direction

        lookDirGoal = Quaternion.AngleAxis(segment.angleH, segment.referenceUpDir)

            * Quaternion.AngleAxis(segment.angleV, referenceRightDir)

            * segment.referenceLookDir;

       

        // Make look and up perpendicular

        Vector3 upDirGoal = segment.referenceUpDir;

        Vector3.OrthoNormalize(lookDirGoal, upDirGoal);

       

        // Interpolated look and up directions in neck parent space

        Vector3 lookDir = lookDirGoal;

        segment.dirUp = Vector3.Slerp(segment.dirUp, upDirGoal, Time.deltaTime*5);

        Vector3.OrthoNormalize(lookDir, segment.dirUp);

       

        // Look rotation in world space

        Quaternion lookRot = (

            (parentRot * Quaternion.LookRotation(lookDir, segment.dirUp))

            * Quaternion.Inverse(

                parentRot * Quaternion.LookRotation(

                    segment.referenceLookDir, segment.referenceUpDir

                )

            )

        );

       

        // Distribute rotation over all joints in segment

        Quaternion dividedRotation =

            Quaternion.Slerp(Quaternion.identity, lookRot, effect / segment.chainLength);

        t = segment.lastTransform;

        for (i=0; i<segment.chainLength; i++) {

            t.rotation = dividedRotation * t.rotation;

            t = t.parent;

        }

    }

   

    // Handle non affected joints

    for (i=0; i<nonAffectedJoints.Length; i++) {

        Vector3 newJointDirection = Vector3.zero;

       

        for (Transform child in nonAffectedJoints[i].joint) {

            newJointDirection = child.position - nonAffectedJoints[i].joint.position;

            break;

        }

       

        Vector3 combinedJointDirection = Vector3.Slerp(

            jointDirections[i], newJointDirection, nonAffectedJoints[i].effect

        );

       

        nonAffectedJoints[i].joint.rotation = Quaternion.FromToRotation(

            newJointDirection, combinedJointDirection

        ) * nonAffectedJoints[i].joint.rotation;

    }

}
 


пишет что ошибка в парсере
tiundv
UNец
 
Сообщения: 31
Зарегистрирован: 01 мар 2011, 16:49

Re: Помогите исправить ошибку в скрипте

Сообщение Zaicheg 25 авг 2011, 17:44

Только ни в коем случае не приводите текст ошибки и не говорите, на какую строку она указывает. Надо сохранять секретность.
Предупреждение с занесением в личное дело, тема перенесена.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Помогите исправить ошибку в скрипте

Сообщение #Test 25 авг 2011, 18:45

Вообще очень классно разглядывать довольно-таки "небольшой" кусок чужого кода без указания на строку с ошибкой X(

пс: здесь случайно не фор ич должно быть, или это только мне кажется немного странным ? и зачем этот цикл если break сразу стоит :-?
Синтаксис:
Используется csharp
for (Transform child in nonAffectedJoints[i].joint) {

            jointDirections[i] = child.position - nonAffectedJoints[i].joint.position;

            break;

        }
Аватара пользователя
#Test
UNец
 
Сообщения: 27
Зарегистрирован: 28 июл 2011, 09:31
Откуда: Екатеринбург
  • ICQ

Помогите исправить ошибку в скрипте

Сообщение tiundv 25 авг 2011, 20:58

Прошу помощи у тех кто знает C#.
Проблема в том что после конвертации из js в C# скрипта HeadLookController есть ошибка которую не могу исправить.
вот скрипт
Синтаксис:
Используется csharp
// Converted from UnityScript to C# at http://www.M2H.nl/files/js_to_c.php - by Mike Hergaarden
// Do test the code! You usually need to change a few small bits.

using UnityEngine;
using System.Collections;

public class HeadLookController : MonoBehaviour {




class BendingSegment
{
    Transform firstTransform;
    Transform lastTransform ;
    float thresholdAngleDifference= 0.0f;
    float bendingMultiplier= 0.6f;
    float maxAngleDifference= 30.0f;
    float maxBendingAngle= 80.0f;
    float responsiveness= 5.0f;
    internal float angleH;
    internal float angleV;
    internal Vector3 dirUp;
    internal Vector3 referenceLookDir;
    internal Vector3 referenceUpDir;
    internal int chainLength;
    internal Quaternion[] origRotations;
}

class NonAffectedJoints
{
    Transform joint;
    float effect= 0.0f;
}

public Transform rootNode;
public BendingSegment[] segments;
public NonAffectedJoints[] nonAffectedJoints;
public float headLookVector= Vector3.forward;
public float headUpVector= Vector3.up;
public float target= Vector3.zero;
public Transform targetTransform;
public float effect= 1.0f;
public float overrideAnimation= false;
   
void  Start (){
    if (rootNode == null) {
        rootNode = transform;
    }
       
    // Setup segments
    foreach(BendingSegment segment in segments)
    {
        Quaternion parentRot = segment.firstTransform.parent.rotation;
        Quaternion parentRotInv = Quaternion.Inverse(parentRot);
        segment.referenceLookDir =
            parentRotInv * rootNode.rotation * headLookVector.normalized;
        segment.referenceUpDir =
            parentRotInv * rootNode.rotation * headUpVector.normalized;
        segment.angleH = 0.0f;
        segment.angleV = 0.0f;
        segment.dirUp = segment.referenceUpDir;
       
        segment.chainLength = 1;
        Transform t = segment.lastTransform;
        while (t != segment.firstTransform && t != t.root) {
            segment.chainLength++;
            t = t.parent;
        }
       
        segment.origRotations = new Quaternion[segment.chainLength];
        t = segment.lastTransform;
        for (FIXME_VAR_TYPE i=segment.chainLength-1; i>=0; i--) {
            segment.origRotations[i] = t.localRotation;
            t = t.parent;
        }
    }
}

void  LateUpdate (){
    if (Time.deltaTime == 0 || targetTransform == null || !targetTransform.gameObject.active)
        return;
       
        target = targetTransform.position;
       
    // Remember initial directions of joints that should not be affected
    Vector3[] jointDirections = new Vector3[nonAffectedJoints.Length];
    for (float i=0; i<nonAffectedJoints.Length; i++) {
        for (Transform child in nonAffectedJoints[i].joint) {
            jointDirections[i] = child.position - nonAffectedJoints[i].joint.position;
            break;
        }
    }
   
    // Handle each segment
    foreach(BendingSegment segment in segments) {
        Transform t = segment.lastTransform;
        if (overrideAnimation) {
            for (i=segment.chainLength-1; i>=0; i--) {
                t.localRotation = segment.origRotations[i];
                t = t.parent;
            }
        }

        Quaternion parentRot = segment.firstTransform.parent.rotation;
        Quaternion parentRotInv = Quaternion.Inverse(parentRot);

        // Desired look direction in world space
        Vector3 lookDirWorld = (target - segment.lastTransform.position).normalized;
       
        // Desired look directions in neck parent space
        Vector3 lookDirGoal = (parentRotInv * lookDirWorld);
       
        // Get the horizontal and vertical rotation angle to look at the target
        float hAngle = AngleAroundAxis(
            segment.referenceLookDir, lookDirGoal, segment.referenceUpDir
        );
       
        Vector3 rightOfTarget = Vector3.Cross(segment.referenceUpDir, lookDirGoal);
       
        Vector3 lookDirGoalinHPlane =
            lookDirGoal - Vector3.Project(lookDirGoal, segment.referenceUpDir);
       
        float vAngle  = AngleAroundAxis(
            lookDirGoalinHPlane, lookDirGoal, rightOfTarget
        );
       
        // Handle threshold angle difference, bending multiplier,
        // and max angle difference here
        float hAngleThr = Mathf.Max(
            0, Mathf.Abs(hAngle) - segment.thresholdAngleDifference
        ) * Mathf.Sign(hAngle);
       
        float vAngleThr = Mathf.Max(
            0, Mathf.Abs(vAngle) - segment.thresholdAngleDifference
        ) * Mathf.Sign(vAngle);
       
        hAngle = Mathf.Max(
            Mathf.Abs(hAngleThr) * Mathf.Abs(segment.bendingMultiplier),
            Mathf.Abs(hAngle) - segment.maxAngleDifference
        ) * Mathf.Sign(hAngle) * Mathf.Sign(segment.bendingMultiplier);
       
        vAngle = Mathf.Max(
            Mathf.Abs(vAngleThr) * Mathf.Abs(segment.bendingMultiplier),
            Mathf.Abs(vAngle) - segment.maxAngleDifference
        ) * Mathf.Sign(vAngle) * Mathf.Sign(segment.bendingMultiplier);
       
        // Handle max bending angle here
        hAngle = Mathf.Clamp(hAngle, -segment.maxBendingAngle, segment.maxBendingAngle);
        vAngle = Mathf.Clamp(vAngle, -segment.maxBendingAngle, segment.maxBendingAngle);
       
        Vector3 referenceRightDir =
            Vector3.Cross(segment.referenceUpDir, segment.referenceLookDir);
       
        // Lerp angles
        segment.angleH = Mathf.Lerp(
            segment.angleH, hAngle, Time.deltaTime * segment.responsiveness
        );
        segment.angleV = Mathf.Lerp(
            segment.angleV, vAngle, Time.deltaTime * segment.responsiveness
        );
       
        // Get direction
        lookDirGoal = Quaternion.AngleAxis(segment.angleH, segment.referenceUpDir)
            * Quaternion.AngleAxis(segment.angleV, referenceRightDir)
            * segment.referenceLookDir;
       
        // Make look and up perpendicular
        Vector3 upDirGoal = segment.referenceUpDir;
        Vector3.OrthoNormalize(lookDirGoal, upDirGoal);
       
        // Interpolated look and up directions in neck parent space
        Vector3 lookDir = lookDirGoal;
        segment.dirUp = Vector3.Slerp(segment.dirUp, upDirGoal, Time.deltaTime*5);
        Vector3.OrthoNormalize(lookDir, segment.dirUp);
       
        // Look rotation in world space
        Quaternion lookRot = (
            (parentRot * Quaternion.LookRotation(lookDir, segment.dirUp))
            * Quaternion.Inverse(
                parentRot * Quaternion.LookRotation(
                    segment.referenceLookDir, segment.referenceUpDir
                )
            )
        );
       
        // Distribute rotation over all joints in segment
        Quaternion dividedRotation =
            Quaternion.Slerp(Quaternion.identity, lookRot, effect / segment.chainLength);
        t = segment.lastTransform;
        for (i=0; i<segment.chainLength; i++) {
            t.rotation = dividedRotation * t.rotation;
            t = t.parent;
        }
    }
   
    // Handle non affected joints
    for (i=0; i<nonAffectedJoints.Length; i++) {
        Vector3 newJointDirection = Vector3.zero;
       
        for (Transform child in nonAffectedJoints[i].joint) {
            newJointDirection = child.position - nonAffectedJoints[i].joint.position;
            break;
        }
       
        Vector3 combinedJointDirection = Vector3.Slerp(
            jointDirections[i], newJointDirection, nonAffectedJoints[i].effect
        );
       
        nonAffectedJoints[i].joint.rotation = Quaternion.FromToRotation(
            newJointDirection, combinedJointDirection
        ) * nonAffectedJoints[i].joint.rotation;
    }
}
   
// The angle between dirA and dirB around axis
static void  AngleAroundAxis ( Vector3 dirA ,   Vector3 dirB ,   Vector3 axis  ){
    // Project A and B onto the plane orthogonal target axis
    dirA = dirA - Vector3.Project(dirA, axis);
    dirB = dirB - Vector3.Project(dirB, axis);
   
    // Find (positive) angle between A and B
    float angle = Vector3.Angle(dirA, dirB);
   
    // Return angle multiplied with 1 or -1
    return angle * (Vector3.Dot(axis, Vector3.Cross(dirA, dirB)) < 0 ? -1 : 1);
}
}


вот кусок скрипта с ошибками
Синтаксис:
Используется csharp
void  LateUpdate (){
    if (Time.deltaTime == 0 || targetTransform == null || !targetTransform.gameObject.active)
        return;
       
        target = targetTransform.position;
       
    // Remember initial directions of joints that should not be affected
    Vector3[] jointDirections = new Vector3[nonAffectedJoints.Length];
    for (float i=0; i<nonAffectedJoints.Length; i++) {
        for (Transform child in nonAffectedJoints[i].joint) {
            jointDirections[i] = child.position - nonAffectedJoints[i].joint.position;
            break;
        }
    }
 


вот тексты ошибок
Assets/HeadLookController.cs(89,31): error CS1525: Unexpected symbol `in', expecting `)', `,', `;', `[', or `='
Assets/HeadLookController.cs(91,17): error CS1525: Unexpected symbol `break', expecting `)', `,', `;', `[', or `='
Assets/HeadLookController.cs(92,9): error CS1525: Unexpected symbol `}', expecting `)', `,', `;', `[', or `='
Assets/HeadLookController.cs(98,10): error CS1525: Unexpected symbol `if', expecting `)', `,', `;', `[', or `='
Assets/HeadLookController.cs(195,5): error CS8032: Internal compiler error during parsing, Run with -v for details
tiundv
UNец
 
Сообщения: 31
Зарегистрирован: 01 мар 2011, 16:49

Re: Помогите исправить ошибку в скрипте

Сообщение Neodrop 25 авг 2011, 21:10

Строчка 89 - забыт знак пунктуации. Скобка или точка с запятой.
А зачем вы полезли в чужой, сложный код, не имея ни малейшего понятия о программировании? :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Помогите исправить ошибку в скрипте

Сообщение seaman 25 авг 2011, 21:18

Зачем повторять тему?
Тут:
http://unity3d.ru/distribution/viewtopic.php?f=105&t=5339
Вам уже ответили. Вместо for нужно foreach.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Помогите исправить ошибку в скрипте

Сообщение Neodrop 25 авг 2011, 21:19

Голуба, for и foreach тут вообще ни при чём.
Но тему дублировать точно излишне.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Помогите исправить ошибку в скрипте

Сообщение tiundv 25 авг 2011, 21:27

#Test писал(а):Вообще очень классно разглядывать довольно-таки "небольшой" кусок чужого кода без указания на строку с ошибкой X(

пс: здесь случайно не фор ич должно быть, или это только мне кажется немного странным ? и зачем этот цикл если break сразу стоит :-?
Синтаксис:
Используется csharp
for (Transform child in nonAffectedJoints[i].joint) {

            jointDirections[i] = child.position - nonAffectedJoints[i].joint.position;

            break;

        }

Пробовал.вылазиют куча других ошибок.Я не бум бум в C#.че душой кривить в js тоже.
вот полный скрипт может кто нибудь исправит ошибки.
Синтаксис:
Используется csharp
// Converted from UnityScript to C# at http://www.M2H.nl/files/js_to_c.php - by Mike Hergaarden
// Do test the code! You usually need to change a few small bits.

using UnityEngine;
using System.Collections;

public class HeadLookController : MonoBehaviour {




class BendingSegment
{
    Transform firstTransform;
    Transform lastTransform ;
    float thresholdAngleDifference= 0.0f;
    float bendingMultiplier= 0.6f;
    float maxAngleDifference= 30.0f;
    float maxBendingAngle= 80.0f;
    float responsiveness= 5.0f;
    internal float angleH;
    internal float angleV;
    internal Vector3 dirUp;
    internal Vector3 referenceLookDir;
    internal Vector3 referenceUpDir;
    internal int chainLength;
    internal Quaternion[] origRotations;
}

class NonAffectedJoints
{
    Transform joint;
    float effect= 0.0f;
}

public Transform rootNode;
public BendingSegment[] segments;
public NonAffectedJoints[] nonAffectedJoints;
public float headLookVector= Vector3.forward;
public float headUpVector= Vector3.up;
public float target= Vector3.zero;
public Transform targetTransform;
public float effect= 1.0f;
public float overrideAnimation= false;
   
void  Start (){
    if (rootNode == null) {
        rootNode = transform;
    }
       
    // Setup segments
    foreach(BendingSegment segment in segments)
    {
        Quaternion parentRot = segment.firstTransform.parent.rotation;
        Quaternion parentRotInv = Quaternion.Inverse(parentRot);
        segment.referenceLookDir =
            parentRotInv * rootNode.rotation * headLookVector.normalized;
        segment.referenceUpDir =
            parentRotInv * rootNode.rotation * headUpVector.normalized;
        segment.angleH = 0.0f;
        segment.angleV = 0.0f;
        segment.dirUp = segment.referenceUpDir;
       
        segment.chainLength = 1;
        Transform t = segment.lastTransform;
        while (t != segment.firstTransform && t != t.root) {
            segment.chainLength++;
            t = t.parent;
        }
       
        segment.origRotations = new Quaternion[segment.chainLength];
        t = segment.lastTransform;
        for (FIXME_VAR_TYPE i=segment.chainLength-1; i>=0; i--) {
            segment.origRotations[i] = t.localRotation;
            t = t.parent;
        }
    }
}

void  LateUpdate (){
    if (Time.deltaTime == 0 || targetTransform == null || !targetTransform.gameObject.active)
        return;
       
        target = targetTransform.position;
       
    // Remember initial directions of joints that should not be affected
    Vector3[] jointDirections = new Vector3[nonAffectedJoints.Length];
    for (float i=0; i<nonAffectedJoints.Length; i++) {
        for (Transform child in nonAffectedJoints[i].joint) {
            jointDirections[i] = child.position - nonAffectedJoints[i].joint.position;
            break;
        }
    }
   
    // Handle each segment
    foreach(BendingSegment segment in segments) {
        Transform t = segment.lastTransform;
        if (overrideAnimation) {
            for (i=segment.chainLength-1; i>=0; i--) {
                t.localRotation = segment.origRotations[i];
                t = t.parent;
            }
        }

        Quaternion parentRot = segment.firstTransform.parent.rotation;
        Quaternion parentRotInv = Quaternion.Inverse(parentRot);

        // Desired look direction in world space
        Vector3 lookDirWorld = (target - segment.lastTransform.position).normalized;
       
        // Desired look directions in neck parent space
        Vector3 lookDirGoal = (parentRotInv * lookDirWorld);
       
        // Get the horizontal and vertical rotation angle to look at the target
        float hAngle = AngleAroundAxis(
            segment.referenceLookDir, lookDirGoal, segment.referenceUpDir
        );
       
        Vector3 rightOfTarget = Vector3.Cross(segment.referenceUpDir, lookDirGoal);
       
        Vector3 lookDirGoalinHPlane =
            lookDirGoal - Vector3.Project(lookDirGoal, segment.referenceUpDir);
       
        float vAngle  = AngleAroundAxis(
            lookDirGoalinHPlane, lookDirGoal, rightOfTarget
        );
       
        // Handle threshold angle difference, bending multiplier,
        // and max angle difference here
        float hAngleThr = Mathf.Max(
            0, Mathf.Abs(hAngle) - segment.thresholdAngleDifference
        ) * Mathf.Sign(hAngle);
       
        float vAngleThr = Mathf.Max(
            0, Mathf.Abs(vAngle) - segment.thresholdAngleDifference
        ) * Mathf.Sign(vAngle);
       
        hAngle = Mathf.Max(
            Mathf.Abs(hAngleThr) * Mathf.Abs(segment.bendingMultiplier),
            Mathf.Abs(hAngle) - segment.maxAngleDifference
        ) * Mathf.Sign(hAngle) * Mathf.Sign(segment.bendingMultiplier);
       
        vAngle = Mathf.Max(
            Mathf.Abs(vAngleThr) * Mathf.Abs(segment.bendingMultiplier),
            Mathf.Abs(vAngle) - segment.maxAngleDifference
        ) * Mathf.Sign(vAngle) * Mathf.Sign(segment.bendingMultiplier);
       
        // Handle max bending angle here
        hAngle = Mathf.Clamp(hAngle, -segment.maxBendingAngle, segment.maxBendingAngle);
        vAngle = Mathf.Clamp(vAngle, -segment.maxBendingAngle, segment.maxBendingAngle);
       
        Vector3 referenceRightDir =
            Vector3.Cross(segment.referenceUpDir, segment.referenceLookDir);
       
        // Lerp angles
        segment.angleH = Mathf.Lerp(
            segment.angleH, hAngle, Time.deltaTime * segment.responsiveness
        );
        segment.angleV = Mathf.Lerp(
            segment.angleV, vAngle, Time.deltaTime * segment.responsiveness
        );
       
        // Get direction
        lookDirGoal = Quaternion.AngleAxis(segment.angleH, segment.referenceUpDir)
            * Quaternion.AngleAxis(segment.angleV, referenceRightDir)
            * segment.referenceLookDir;
       
        // Make look and up perpendicular
        Vector3 upDirGoal = segment.referenceUpDir;
        Vector3.OrthoNormalize(lookDirGoal, upDirGoal);
       
        // Interpolated look and up directions in neck parent space
        Vector3 lookDir = lookDirGoal;
        segment.dirUp = Vector3.Slerp(segment.dirUp, upDirGoal, Time.deltaTime*5);
        Vector3.OrthoNormalize(lookDir, segment.dirUp);
       
        // Look rotation in world space
        Quaternion lookRot = (
            (parentRot * Quaternion.LookRotation(lookDir, segment.dirUp))
            * Quaternion.Inverse(
                parentRot * Quaternion.LookRotation(
                    segment.referenceLookDir, segment.referenceUpDir
                )
            )
        );
       
        // Distribute rotation over all joints in segment
        Quaternion dividedRotation =
            Quaternion.Slerp(Quaternion.identity, lookRot, effect / segment.chainLength);
        t = segment.lastTransform;
        for (i=0; i<segment.chainLength; i++) {
            t.rotation = dividedRotation * t.rotation;
            t = t.parent;
        }
    }
   
    // Handle non affected joints
    for (i=0; i<nonAffectedJoints.Length; i++) {
        Vector3 newJointDirection = Vector3.zero;
       
        for (Transform child in nonAffectedJoints[i].joint) {
            newJointDirection = child.position - nonAffectedJoints[i].joint.position;
            break;
        }
       
        Vector3 combinedJointDirection = Vector3.Slerp(
            jointDirections[i], newJointDirection, nonAffectedJoints[i].effect
        );
       
        nonAffectedJoints[i].joint.rotation = Quaternion.FromToRotation(
            newJointDirection, combinedJointDirection
        ) * nonAffectedJoints[i].joint.rotation;
    }
}
   
// The angle between dirA and dirB around axis
static void  AngleAroundAxis ( Vector3 dirA ,   Vector3 dirB ,   Vector3 axis  ){
    // Project A and B onto the plane orthogonal target axis
    dirA = dirA - Vector3.Project(dirA, axis);
    dirB = dirB - Vector3.Project(dirB, axis);
   
    // Find (positive) angle between A and B
    float angle = Vector3.Angle(dirA, dirB);
   
    // Return angle multiplied with 1 or -1
    return angle * (Vector3.Dot(axis, Vector3.Cross(dirA, dirB)) < 0 ? -1 : 1);
}
}
 
tiundv
UNец
 
Сообщения: 31
Зарегистрирован: 01 мар 2011, 16:49

Re: Помогите исправить ошибку в скрипте

Сообщение Neodrop 25 авг 2011, 21:30

Я объединил темы. За повторное дублирование последует наказание. :-w
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Помогите исправить ошибку в скрипте

Сообщение tiundv 25 авг 2011, 21:45

Прошу закрыть тему.
Вся эта конвертация из js в C# полный отстой.Программисты и те путаются.Легче новый скрипт написать чем испровлять.
tiundv
UNец
 
Сообщения: 31
Зарегистрирован: 01 мар 2011, 16:49

Re: Помогите исправить ошибку в скрипте

Сообщение #Test 25 авг 2011, 22:18

Neodrop писал(а):for и foreach тут вообще ни при чём.

Ошибка в этом моменте все-таки тоже была, а то, что знак пунктуации пропущен - это да, не разглядывал полностью скрипт раз указания на строку с ошибкой автор изначально не дал.
Аватара пользователя
#Test
UNец
 
Сообщения: 27
Зарегистрирован: 28 июл 2011, 09:31
Откуда: Екатеринбург
  • ICQ

Re: Помогите исправить ошибку в скрипте

Сообщение Zaicheg 25 авг 2011, 22:18

tiundv писал(а):Вся эта конвертация из js в C# полный отстой.Программисты и те путаются.

Чесна?

Голуба, for и foreach тут вообще ни при чём.

Ну, for там и правда некорректно употреблён
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Помогите исправить ошибку в скрипте

Сообщение Neodrop 26 авг 2011, 00:48

Да плевать, как он там употреблён. Он работает и сбоев не вызывает. Желаете поспорить? Моя рапира к вашим услугам :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Помогите исправить ошибку в скрипте

Сообщение Zaicheg 26 авг 2011, 06:03

Neodrop писал(а):Да плевать, как он там употреблён. Он работает и сбоев не вызывает. Желаете поспорить? Моя рапира к вашим услугам :-?

Код, аналогичный употреблённому (в употреблённом много ошибок и кроме точек с запятыми — например, попытка неявного приведения float к Vector3 и перебора внутри немассива):
http://pastebin.com/pHajKcwW
Assets/NewBehaviourScript.cs(10,29): error CS1525: Unexpected symbol `in', expecting `)', `,', `;', `[', or `='
Assets/NewBehaviourScript.cs(13,17): error CS1525: Unexpected symbol `}', expecting `)', `,', `;', `[', or `='
Assets/NewBehaviourScript.cs(15,1): error CS8025: Parsing error
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24