Четверг, 25 Апреля 2024, 13:31

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемка со скриптом.
Проблемка со скриптом.
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 ошибки мне всё же не понятны cry

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". cry


Сообщение отредактировал 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] для обработки какого-либо кода, в глаза режет куча некрасивых строк. wacko


Самый лучший юзер 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
почетный гость
Сейчас нет на сайте
Всем спасибо. Я наверное вас уже достал... но у меня опять проблема с переводом! biggrin

Собсно вот пациент на 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
данных мало
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проблемка со скриптом.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг