First of all, when you have 1 compile time error in your code, you stop and fix it before writing more code. You can’t just create errors on top of other errors in your code.
There are more than 13 errors in your code but only 2 mistakes created those errors.
1.You must use a new
keyword to create a new vector. One exception is when you are calling static
functions or constructors such as Vector3.zero
,Vector3.up
and so on.
So replace Vector3(Random.Range...
with new Vector3(Random.Range.....
And tree.transform.position + Vector3(0, 0, 0)
with tree.transform.position + new Vector3(0, 0, 0)
Do this for 5 other mistakes too.
2.Vector3
takes float
,float
,float
as a parameter not int
,int
,int
.
In this line of Vector3(Random.Range(-1.0, 1.0), 0, Random.Range(-1.0, 1.0))
;, you are passing in int
to Vector3
instead of float
. To fix this, you put f after each value in the Random.Range
function. The f lets the compiler know that this is a float
not int
. If you don’t. Random.Range int overload method will be called instead of float function overload.
So again change Vector3(Random.Range(-1.0, 1.0), 0, Random.Range(-1.0, 1.0));
to new Vector3(Random.Range(-1.0f, 1.0f), 0, Random.Range(-1.0f, 1.0f));
.
public class Tree : MonoBehaviour
{
public int Health = 5;
public Transform logs;
public Transform coconut;
public GameObject tree;
public Camera myCamera;
public int speed = 8;
void Start()
{
tree = this.gameObject;
GetComponent<Rigidbody>().isKinematic = true;
myCamera = GameObject.FindObjectOfType<Camera>();
}
// Update is called once per frame
void Update()
{
if (Health > 0)
{
if (Vector3.Distance(transform.position, myCamera.transform.root.transform.position) < 10f)
{
if (Input.GetKeyDown(KeyCode.R) && WeaponSwitching.check == true)
{
Ray ray = new Ray(myCamera.transform.position, myCamera.transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 10f))
{
if (hit.collider.gameObject == gameObject)
{
--Health;
}
}
}
}
}
if (Health <= 0)
{
GetComponent<Rigidbody>().isKinematic = false;
GetComponent<Rigidbody>().AddForce(transform.forward * speed);
DestroyTree();
}
}
void DestroyTree()
{
wait();
Destroy(tree);
Vector3 position = new Vector3(Random.Range(-1.0f, 1.0f), 0, Random.Range(-1.0f, 1.0f));
Instantiate(logs, tree.transform.position + new Vector3(0, 0, 0) + position, Quaternion.identity);
Instantiate(logs, tree.transform.position + new Vector3(2, 2, 0) + position, Quaternion.identity);
Instantiate(logs, tree.transform.position + new Vector3(5, 5, 0) + position, Quaternion.identity);
Instantiate(coconut, tree.transform.position + new Vector3(0, 0, 0) + position, Quaternion.identity);
Instantiate(coconut, tree.transform.position + new Vector3(2, 2, 0) + position, Quaternion.identity);
Instantiate(coconut, tree.transform.position + new Vector3(5, 5, 0) + position, Quaternion.identity);
}
IEnumerator wait()
{
yield return new WaitForSeconds(7.0f);
}
}
Purple__Drunk 27 / 26 / 2 Регистрация: 26.12.2020 Сообщений: 86 |
||||||||
1 |
||||||||
10.01.2021, 19:43. Показов 9531. Ответов 2 Метки unity (Все метки)
Есть спрайт персонажа и пустой обьект, прицепленный к нему в роли точки для вылета пули.
Ругается на
Аргумент 2: не удается преобразовать из «UnityEngine.Vector3» в «UnityEngine.Transform». Но как обозначить точку вылета по другому? И почему всегда это работало, а сейчас нет? Из-за проверки в if? Тогда как проверить дистанцию не вектором? И вообще как условие проверки относится к выполняеммой инструкции?
__________________
0 |
2496 / 1512 / 803 Регистрация: 23.02.2019 Сообщений: 3,689 |
|
10.01.2021, 20:03 |
2 |
Решение Посмотрите внимательно на перегрузки метода Instantiate https://docs.unity3d.com/Scrip… tiate.html
2 |
Tornamic 0 / 0 / 0 Регистрация: 02.12.2021 Сообщений: 9 |
||||
03.05.2022, 18:55 |
3 |
|||
Можно так, у меня работает
0 |
Поворот объекта
Поворот объекта
Здравствуйте! Такой вопрос: хотел сделать что бы куб поворачивался в сторону игрока написал простенький скрипт:
Используется csharp
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
public int rotationSpeed;
private GameObject myTarget;
// Use this for initialization
void Start ()
{
myTarget = GameObject.FindGameObjectWithTag(«Player»);
}
// Update is called once per frame
void Update ()
{
Debug.DrawLine(myTarget.transform.position, this.transform.position, Color.red);
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(myTarget.transform.position — this.transform.position), rotationSpeed * Time.deltaTime);
}
}
Все хорошо но поворачивается куб во всех трех направлениях а мне надо только в горизонтальной плоскости? Так же я пробовал просто покрутить куб вокруг оси Y
Используется csharp
this.transform.rotation.y += 2
, но он ругается на несоответствие типов? Я пилю Unity второй день так что за банальность прошу прощения.
- condor
- UNец
- Сообщения: 6
- Зарегистрирован: 15 ноя 2012, 22:44
Re: Поворот объекта
Volandpro 15 ноя 2012, 23:08
Попробуй вместо myTarget.transform.position — this.transform.position написать Vector3, где x и z будут соответственно равны x и z от myTarget.transform.position — this.transform.position, а у равен 0. Делать rotation.y=0 нельзя, нельзя менять значение по отдельной оси, нужно менять сразу весь rotation
-
Volandpro - UNITрон
- Сообщения: 242
- Зарегистрирован: 19 авг 2012, 17:07
Re: Поворот объекта
condor 15 ноя 2012, 23:20
Изменил на
Используется csharp
Vector3 abc = new Vector3(myTarget.transform.position.x — this.transform.position.x, 0, myTarget.transform.position.z — this.transform.position.z);
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, abc, rotationSpeed * Time.deltaTime);
Но Unity дает сразу две ошибки??
- condor
- UNец
- Сообщения: 6
- Зарегистрирован: 15 ноя 2012, 22:44
Re: Поворот объекта
Volandpro 15 ноя 2012, 23:24
myTarget.transform.position.x — this.transform.position.x нельзя так писать) Ты меняешь значение x от myTarget.transform.position, надо менять сразу весь position. Попробуй (myTarget.transform.position- this.transform.position).x авось получится) Нету сейчас юнити под рукой, так что проверить не могу
P.S. лучше всегда пиши, что за ошибка, так легче понять будет
-
Volandpro - UNITрон
- Сообщения: 242
- Зарегистрирован: 19 авг 2012, 17:07
Re: Поворот объекта
condor 15 ноя 2012, 23:34
изменил на
Используется csharp
Vector3 abc = new Vector3((myTarget.transform.position — this.transform.position).x, 0, (myTarget.transform.position — this.transform.position).z);
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, abc, rotationSpeed * Time.deltaTime);
Ошибки:
error CS1503: Argument `#2′ cannot convert `UnityEngine.Vector3′ expression to type `UnityEngine.Quaternion’
error CS1502: The best overloaded method match for `UnityEngine.Quaternion.Slerp(UnityEngine.Quaternion, UnityEngine.Quaternion, float)’ has some invalid arguments
Насколько я понял я неправильно задаю Vector3 и отсюда сразу две ошибки
- condor
- UNец
- Сообщения: 6
- Зарегистрирован: 15 ноя 2012, 22:44
Re: Поворот объекта
Volandpro 15 ноя 2012, 23:36
Ну вот все понятно) abc должен быть не Вектор3, а кватернион. А тебе нужно, чтобы объект медленно поворачивался или сразу? А нене, чо то я затупил, пиши Quaternion.LookRotation(abc).
Quaternion.Slerp(this.transform.rotation,Quaternion.LookRotation(abc), rotationSpeed * Time.deltaTime);
-
Volandpro - UNITрон
- Сообщения: 242
- Зарегистрирован: 19 авг 2012, 17:07
Re: Поворот объекта
condor 15 ноя 2012, 23:43
Желательно плавно. Изменил на
Используется csharp
Quaternion abc = new Quaternion((myTarget.transform.position — this.transform.position).x, 0, (myTarget.transform.position — this.transform.position).z, 0);
, ошибок нет но объект перевернулся с ног на голову, а так вроде поворачивается.
- condor
- UNец
- Сообщения: 6
- Зарегистрирован: 15 ноя 2012, 22:44
Re: Поворот объекта
Volandpro 15 ноя 2012, 23:46
Ненене, ща объясню)
Используется csharp
Vector3 abc = new Vector3(myTarget.transform.position.x — this.transform.position.x, 0, myTarget.transform.position.z — this.transform.position.z);
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(abc), rotationSpeed * Time.deltaTime);
-
Volandpro - UNITрон
- Сообщения: 242
- Зарегистрирован: 19 авг 2012, 17:07
Re: Поворот объекта
condor 15 ноя 2012, 23:53
Большое Спасибо!!!! То что надо! А есть ли какая нибудь документация на русском типа Unity help, или какой нибудь сборник простеньких скриптов и примеров наподобие этого?
- condor
- UNец
- Сообщения: 6
- Зарегистрирован: 15 ноя 2012, 22:44
Re: Поворот объекта
Volandpro 15 ноя 2012, 23:57
Уроки от Огасоды и этот форум) на самом деле здесь есть дохренища всего, почти все)
viewtopic.php?f=105&t=2051
Вот эта темка очень полезна
-
Volandpro - UNITрон
- Сообщения: 242
- Зарегистрирован: 19 авг 2012, 17:07
Re: Поворот объекта
condor 16 ноя 2012, 00:00
Ладно буду искать, невпервой. Еще раз Спасибо!!! Чувчтвую я еще помучаю этот форум
- condor
- UNец
- Сообщения: 6
- Зарегистрирован: 15 ноя 2012, 22:44
Re: Поворот объекта
Volandpro 16 ноя 2012, 00:00
Я его почти каждый день мучаю)
-
Volandpro - UNITрон
- Сообщения: 242
- Зарегистрирован: 19 авг 2012, 17:07
Вернуться в Почемучка
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и гости: 31
Проблемка со скриптом. |
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
|
|