Проблемка со скриптом.
| |
Georgiy0912 | Дата: Вторник, 10 Июля 2012, 20:49 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Решил ближе познакомиться с Instantiate, но почти все уроки на JS, а я люблю CS, так, что пришлось переводить, но я где то накосячил, сам не знаю где(( Вот оригинал:
var projectile : Rigidbody; var speed = 20;
function Update () { if (Input.GetMouseButtonDown(0)) { var instantiatedProjectile : Rigidbody = Instantiate( projectile, transform.position, transform.rotation); instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0, 0, speed)); Physics.IgnoreCollision( instantiatedProjectile.collider, transform.root.collider); } }
В моём переводе:
1. using UnityEngine; 2. using System.Collections; 3. 4. public class Missile : MonoBehaviour { 5. Rigidbody projectile; 6. int speed = 20; 7. 8. void Update (){ 9. if (Input.GetMouseButtonDown(0)) 10. { 11. Rigidbody instantiatedProjectile = Instantiate( projectile, transform.position, transform.rotation); 12. instantiatedProjectile.velocity = transform.TransformDirection(Vector3(0, 0, speed)); 13. Physics.IgnoreCollision( instantiatedProjectile.collider, transform.root.collider); 14. } 15. } 16. }
Вот ошибки: 1. Assets/Tutorial/Missile.cs(11,11): error CS0266: Cannot implicitly convert type `UnityEngine.Object' to `UnityEngine.Rigidbody'. An explicit conversion exists (are you missing a cast?) 2. Assets/Tutorial/Missile.cs(12,64): error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected 3. Assets/Tutorial/Missile.cs(12,45): error CS1502: The best overloaded method match for `UnityEngine.Transform.TransformDirection(UnityEngine.Vector3)' has some invalid arguments 4. Assets/Tutorial/Missile.cs(12,45): error CS1503: Argument `#1' cannot convert `object' expression to type `UnityEngine.Vector3'
Я так понял, что я пытаюсь присвоить переменной одного типа, значение другого, но как это исправить?
|
|
| |
seaman | Дата: Вторник, 10 Июля 2012, 21:47 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Любите C#? Тогда должны знать, что он не любит неявного приведения типов. Что Вам написало? Что не может привести тип Object к типу Rigidbody. Что нужно сделать? Привести! Rigidbody instantiatedProjectile = Instantiate( projectile, transform.position, transform.rotation) as Rigidbody;
|
|
| |
Georgiy0912 | Дата: Вторник, 10 Июля 2012, 23:14 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| спасибо Добавлено (10.07.2012, 23:14) --------------------------------------------- Хотя, остальные 3 ошибки мне всё же не понятны
|
|
| |
seaman | Дата: Вторник, 10 Июля 2012, 23:35 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Учите C# - тогда будет все понятно. 2. - переменная Vector3 не так создается. Слышали о таком слове new? Нужно new Vector3(0, 0, speed) 3 и 4 из-за этого же.
|
|
| |
Georgiy0912 | Дата: Среда, 11 Июля 2012, 16:31 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Ещё проблема с переводом!
Вот оригинал:
var explosionTime = 1.0; var explosionRadius = 5.0; var explosionPower = 2000.0;
function Start () { Destroy(gameObject, explosionTime); var colliders : Collider[] = Physics.OverlapSphere(transform.position, explosionRadius); for( var hit in colliders ){ if(hit.rigidbody){ hit.rigidbody.AddExplosionForce(explosionPower, transform.position, ExplosionRadius); } } if ( partileEmitter ) { particleEmitter.emit = true; yield WaitForSeconds(0.5); particleEmitter.emit = falce; } } }
Вроде бы всё понятно, но не могу перевести вот это условие:
for( var hit in colliders ){}
Я чёт вообще не понял, что значит "var hit in colliders".
Сообщение отредактировал Georgiy0912 - Среда, 11 Июля 2012, 16:41 |
|
| |
Злой_Ублюдок | Дата: Среда, 11 Июля 2012, 16:39 | Сообщение # 6 |
Конструктороненавистник
Сейчас нет на сайте
| Это бред какой-то.
var hit colliders, наверное, означает объявление переменной colliders типа hit.
а For - это цикл. Т.е. for(var hit colliders) - это "пока есть переменная, делать что-то". Короче, бред.
Боже, боже, которого-то в сущности и нет, до чего ты, которого на самом деле-то и нет, довел игродела?!
|
|
| |
Georgiy0912 | Дата: Среда, 11 Июля 2012, 16:42 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Злой_Ублюдок, пересмотри пожалст ещё раз, а то я тутор не до конца посмотрел. Сейчас всё поправил, должно быть правильно.
|
|
| |
Злой_Ублюдок | Дата: Среда, 11 Июля 2012, 16:44 | Сообщение # 8 |
Конструктороненавистник
Сейчас нет на сайте
| Вот, теперь все правильно. Честно признаюсь, С-шарп в глаза-то не видел. Кинь пример скрипта на нем (другой), я тебе этот попробую переделать.
Боже, боже, которого-то в сущности и нет, до чего ты, которого на самом деле-то и нет, довел игродела?!
|
|
| |
Georgiy0912 | Дата: Среда, 11 Июля 2012, 16:46 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| Всмысле любой? Щас, найду... Добавлено (11.07.2012, 16:46) --------------------------------------------- Ну например вот:
using UnityEngine; using System.Collections;
public class Missile : MonoBehaviour { public Rigidbody projectile; int speed = 20;
void Update (){ if (Input.GetMouseButtonDown(0)) { Rigidbody instantiatedProjectile = Instantiate( projectile, transform.position, transform.rotation) as Rigidbody; instantiatedProjectile.velocity = transform.TransformDirection(new Vector3(0, 0, speed)); Physics.IgnoreCollision( instantiatedProjectile.collider, transform.root.collider); } } }
|
|
| |
Злой_Ублюдок | Дата: Среда, 11 Июля 2012, 16:52 | Сообщение # 10 |
Конструктороненавистник
Сейчас нет на сайте
| Хм. Не получается.
Короче, Code for( var hit in colliders ){ if(hit.rigidbody){ hit.rigidbody.AddExplosionForce(explosionPower, transform.position, ExplosionRadius); } Означает: Пока в colliders есть переменная hit Если hit.rigidbody не равно null Создать взрыв.
Боже, боже, которого-то в сущности и нет, до чего ты, которого на самом деле-то и нет, довел игродела?!
|
|
| |
seaman | Дата: Среда, 11 Июля 2012, 16:52 | Сообщение # 11 |
старожил
Сейчас нет на сайте
| for( var hit in colliders ) == foreach( var hit in colliders )
|
|
| |
Georgiy0912 | Дата: Среда, 11 Июля 2012, 16:58 | Сообщение # 12 |
почетный гость
Сейчас нет на сайте
| Спасибо, но хотелось бы по подробней, жду еще ответы. seaman, я не понял, что ты имел в виду.
|
|
| |
iNikit | Дата: Среда, 11 Июля 2012, 20:03 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Пардон за оффтоп, но не забывайте пожалуйста пользоваться BB-кодом [code][/code] для обработки какого-либо кода, в глаза режет куча некрасивых строк.
Самый лучший юзер GCUP :3
Сообщение отредактировал iNikit - Среда, 11 Июля 2012, 20:04 |
|
| |
IIyxMASTER | Дата: Четверг, 12 Июля 2012, 06:46 | Сообщение # 14 |
постоянный участник
Сейчас нет на сайте
| Quote (Georgiy0912) Спасибо, но хотелось бы по подробней, жду еще ответы. seaman, я не понял, что ты имел в виду. Он хотел сказать что, прежде чем лезть в дерби кода, иди сперва хотяб циклы выучи...
|
|
| |
seaman | Дата: Четверг, 12 Июля 2012, 10:58 | Сообщение # 15 |
старожил
Сейчас нет на сайте
| В шарпе цикл по всем элементам массива(списка и т.п.) записывается так как в моем сообщении справа, а не так как Вы записали (слева). ЗЫ: Если Вы действительно "любите" шарп - изучайте его!
|
|
| |
Georgiy0912 | Дата: Четверг, 12 Июля 2012, 15:26 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| iNikit, ок IIyxMASTER, Я знаю циклы Блин ребят, я спросил, что значит var hit colliders, а вы мне про циклы толкаете... Вы меня не поняли, я отлично понимаю, что такое for, я не понимаю, как перевести на C# его условие - "var hit colliders", вот и все!
|
|
| |
seaman | Дата: Четверг, 12 Июля 2012, 16:06 | Сообщение # 17 |
старожил
Сейчас нет на сайте
| Quote Вы меня не поняли, я отлично понимаю, что такое for, я не понимаю, как перевести на C# его условие - "var hit colliders", вот и все! Вы похоже не просто не понимаете, Вы читать не умеете. Я Вам давно уже все написал. Более того не var hit colliders а - var hit in colliders
Сообщение отредактировал seaman - Четверг, 12 Июля 2012, 16:06 |
|
| |
sinoptis | Дата: Четверг, 12 Июля 2012, 16:30 | Сообщение # 18 |
почетный гость
Сейчас нет на сайте
| Js Code for( var hit in colliders ) C# Code RaycastHit hit; if(Physics.Raycast(ray,out hit,100)){ foreach(hit in colliders){ //трататата } } Если я конечно не ошибаюсь
Сообщение отредактировал sinoptis - Четверг, 12 Июля 2012, 16:34 |
|
| |
Georgiy0912 | Дата: Четверг, 12 Июля 2012, 17:39 | Сообщение # 19 |
почетный гость
Сейчас нет на сайте
| Всем спасибо. Я наверное вас уже достал... но у меня опять проблема с переводом!
Собсно вот пациент на JS: var contact : ContactPoint = collision.contacts[0];
Он же после перевода на C#: ContactPoint contact = collision.contacts[0];
Вот на что ругается: Assets/Tutorial/Rocket.cs(14,46): error CS0103: The name `collision' does not exist in the current context
|
|
| |
seaman | Дата: Четверг, 12 Июля 2012, 19:30 | Сообщение # 20 |
старожил
Сейчас нет на сайте
| Quote Если я конечно не ошибаюсь Ошибаешься. Забыл var Georgiy0912 данных мало
|
|
| |
|