首先我要说的是,我是一个完全的初学者,他只是通过拼凑教程和网站中的部分来实现这一目标。
我所要做的就是创造一个只有站立时才会移动的平台。
using UnityEngine;
using System.Collections;
public class MovingPlatform : MonoBehaviour
{
public bool isPlayerOn;
[SerializeField]
Transform platform;
[SerializeField]
Transform startTransform;
[SerializeField]
Transform endTransform;
[SerializeField]
float platformSpeed;
Vector3 direction;
Transform destination;
void OnCollisionEnter (Collision other) {
if (Collision.gameObject.tag == "Player") {
isPlayerOn = true;
}
}
void OnCollisionExit (Collision other) {
if (Collision.gameObject.tag == "Player") {
isPlayerOn = false;
}
}
void Start (){
SetDestination (startTransform);
}
void FixedUpdate(){
platform.rigidbody.MovePosition (platform.position + direction * platformSpeed * Time.fixedDeltaTime);
if (Vector3.Distance (platform.position, destination.position) < platformSpeed * Time.fixedDeltaTime) {
SetDestination (destination == startTransform ? endTransform : startTransform);
}
}
void SetDestination(Transform dest){
destination = dest;
direction = (destination.position -platform.position).normalized;
}
}
现在我不知道这是否会起作用,我设法摆脱了大约9个其他错误但不是这个错误。
Assets / MovingPlatform.cs(31,31):错误CS0120:访问非静态成员`UnityEngine.Collision.gameObject'需要对象引用
答案 0 :(得分:1)
尝试将代码更改为:
void OnCollisionEnter (Collision other) {
if (other.gameObject.tag == "Player") {
isPlayerOn = true;
}
}
而不是:
if (Collision.gameObject.tag == "Player") {
错误告诉您gameObject
类上没有名为Collision
的静态成员。要调用非静态成员,您需要一个对象引用。在这种情况下,对象引用看起来应该是传递给此方法的other
实例。
您可能还想对静态与非静态进行一些搜索。这里有一些好的答案: Static vs non-static class members